SQL не работает с двоичной логикой (только true
и false
). Работает с (как минимум) троичной логикой (true
, false
и null
). Это третье значение усложняет оценку логических условий (например, =
, которое вы имеете в условии).
По сути, любое выражение с нулевым значением возвращает нулевое значение, и, поскольку null
никогда не является true
, запрос не будет возвращать никаких строк, как если бы вы написали
select count (p_id) as mycustomer from person where 1 = 2
Чтобы обойти это, существуют некоторые специальные синтаксические конструкции, наиболее распространенными из которых являются условия is null
и is not null
. Как указывалось в других ответах, чтобы получить нулевые значения, нужно написать
select count (p_id) as mycustomer from person where date_active is null
Интересной особенностью нулей является то, что они не равны и не равны другим нулям.
select * from person where null=null
и
select * from person where null!=null
оба не возвращают никаких строк.