Я читал эту статью: Получить null == null в SQL
И консенсус заключается в том, что при попытке проверить равенство между двумя (обнуляемыми) столбцами sql правильный подход:
where ((A=B) OR (A IS NULL AND B IS NULL))
Когда A и B являются NULL, (A = B) все еще возвращает FALSE, так как NULL не равен NULL. Вот почему требуется дополнительная проверка.
Как насчет тестирования неравенства? Следуя приведенному выше обсуждению, мне показалось, что для проверки неравенства мне нужно будет сделать что-то вроде:
WHERE ((A <> B) OR (A IS NOT NULL AND B IS NULL) OR (A IS NULL AND B IS NOT NULL))
Однако я заметил, что это необязательно (по крайней мере, не на informix 11.5), и я могу просто сделать:
where (A<>B)
Если A и B являются NULL, это возвращает FALSE. Если значение NULL не равно NULL, то это не должно возвращать TRUE?
ИЗМЕНИТЬ
Все это хорошие ответы, но я думаю, что мой вопрос был немного расплывчатым. Позвольте мне перефразировать:
Учитывая, что A или B могут быть NULL, достаточно ли проверить их неравенство на
where (A<>B)
Или мне нужно явно проверить его так:
WHERE ((A <> B) OR (A IS NOT NULL AND B IS NULL) OR (A IS NULL AND B IS NOT NULL))
Отправьте запрос на этот поток для ответа на этот вопрос.