Я читал эту статью:
Получить ноль == ноль в 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))
Однако я заметил, что в этом нет необходимости (по крайней мере, в Inforix 11.5), и я могу просто сделать:
where (A<>B)
Если A и B равны NULL, это возвращает FALSE. Если NULL не равно NULL, то не должно ли это возвращать TRUE?
EDIT
Это все хорошие ответы, но я думаю, что мой вопрос был немного расплывчатым. Позвольте мне перефразировать:
Учитывая, что либо 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))
ОБРАТИТЕСЬ к этому ветке для ответа на этот вопрос.