Я растерялась за рассуждение о следующем:Почему PostgreSQL не возвращает нулевые значения, когда условие <> верно
SELECT * FROM table WHERE avalue is null
Возвращает й количество строк, где «Avalue» является нулевым
SELECT * FROM table WHERE avalue <> true
Делает не возвращает строки, где 'avalue' равно null.
Мои рассуждения (что представляется неверным) является то, что null
представляет собой уникальное значение (это даже не равно null
) означает, что он должен показать в наборе результатов, как это не равно true
либо.
Я думаю, вы могли бы утверждать, что, сказав column <> value
, вы подразумеваете, что столбец имеет значение, поэтому игнорирует значения null
.
Какова причина этого, и это то же самое в других распространенных SQL DB?
Мое рассуждение (предположение) говорит мне, что это противоречит интуиции, и я хотел узнать почему.
[трехзначной логики] (http://en.wikipedia.org/wiki/Three-valued_logic). Вы предполагаете, что единственными возможными ответами на '<>' являются 'true' или' false', тогда как в SQL существует опция 'unknown'. Это соответствует стандартам. (Смутно, MySQL объединяет 'UNKNOWN' и' NULL', так что там возможны возможные «TRUE», «FALSE» и «NULL»). –
SQL Server делает это точно так же. – Fanda
Как говорит Дэмиен ... Это обычно называют трехзначной логикой. – Kuberchaun