Ответ 1
В SQL сравнение между значением null
и любым другим значением (включая другое null
) с использованием оператора сравнения (например, =
, !=
, <
и т.д.) Приведет к null
, который рассматривается как false
для целей предложения where (строго говоря, это "не правда", а не "ложь", но эффект тот же).
Причина заключается в том, что null
означает "неизвестный", поэтому результат любого сравнения с null
также "неизвестен". Таким образом, вы не получите удар по строкам, если закодируете where my_column = null
.
SQL предоставляет специальный синтаксис для проверки, если столбцом является null
, через is null
и is not null
, что является специальным условием для проверки для null
(или нет null
).
Вот некоторые SQL, показывающие различные условия и их влияние, как указано выше.
create table t (x int, y int);
insert into t values (null, null), (null, 1), (1, 1);
select 'x = null' as test , x, y from t where x = null
union all
select 'x != null', x, y from t where x != null
union all
select 'not (x = null)', x, y from t where not (x = null)
union all
select 'x = y', x, y from t where x = y
union all
select 'not (x = y)', x, y from t where not (x = y);
возвращает только 1 строку (как и ожидалось):
TEST X Y
x = y 1 1
Посмотрите, как работает SQLFiddle