NULL (SQL)
=
や <
などの比較述語演算子を用いた演算に、 NULL
を適用すると、常に結果がunknown (undefined)になる
従って、
A = NULL
はunknownだし、
NULL = NULL
もunknownになる
そのため、そのクエリはエラーを返したり、想定した結果が返ってこない
例
以下のテーブルについて考える
sqlCREATE TABLE hoge (
id INT,aq
isX BOOLEAN -- NULLを許容するBOOLEAN
);
INSERT INTO hoge (id, isX) VALUES
(1, true), (2, true), (3, false), (4, NULL);
not true
したときは、NULLは返ってこない
SELECT x FROM hoge WHERE NOT (isX = true)
としても
結果は false
のもののみ
他の言語だと、 x = true | false | null
で、
x != true
なら
false | null
が返ってきそうだが、
そうはならない
以下の2つは、式自体がNULLになるので、何の結果も返ってこない
SELECT x FROM hoge WHERE isX = NULL
SELECT x FROM hoge WHERE isX <> NULL