Ответ
По умолчанию NULL для SQL означает «неизвестно». Таким образом, любое сравнение с «неизвестным» является «неизвестным».
Например, если рядом с Бобом стоит незнакомец, и вы хотите задать вопрос: «Имя незнакомца совпадает с именем Боба?». Ответ неизвестен.
Поскольку вы спрашиваете: «Верните все записи, где значение не равно« A »». Когда он попадает в этот столбец NULL, SQL по-прежнему говорит: «Я не знаю». Поскольку выражение не имеет значения true, эта запись не возвращается.
Решение
Любое выражение, которое сравнивает NULL с константой, всегда будет NULL, поэтому используйте специальные IS NULL
и IS NOT NULL
для проверки значений NULL.
Это даст вам b
, c
, d
и NULL
:
SELECT val
FROM @table
WHERE val NOT IN ('a') OR val IS NULL
Обходной путь
Вы можете изменить поведение по умолчанию для NULL:
SET ANSI_NULLS OFF