В SQL Server 2008 я запускаю следующий SQL:
SELECT id, old_tgt_price, new_tgt_price
FROM inst i
WHERE inst_id IN (281, 229)
AND is_latest = 1
со следующим результатом:
id old_tgt_price new_tgt_price
4492 462 NULL
4487 2700 2500
В этом нет ничего плохого.Если я добавлю проверку, что старая и новая цена не равны (хотя ожидаем, что некоторые значения равны NULL):
SELECT id, old_tgt_price, new_tgt_price
FROM inst i
WHERE inst_id IN (281, 229)
AND is_latest = 1
AND (isnull(old_tgt_price, 0) != isnull(new_tgt_price, 0))
, я получу одинаковый результат.Для записи с идентификатором 4492 условие AND (isnull (old_tgt_price, 0)! = Isnull (new_tgt_price, 0))) обязательно должно завершиться неудачей.
Почему запись 4492 по-прежнему возвращается во втором наборе результатов?