その通り。 NULL
特定の値ではなく、不明な値を表します(NULL
と同じではありません) Cの場合、またはnil
Rubyなどで)SQLでは、未知の値と何かを比較すると、結果も不明です。また、WHERE
の行は取得されません。 状態は不明です。
これを試してください:
SELECT NULL <> 2;
NULL
が表示されます 結果として。
これを試してください:
SELECT * FROM t WHERE NULL;
テーブルがt
であっても、行は表示されません。 巨大です。
あなたが望んでいたことを本当に必要としている場合(そして私はこれを支持していません)、あなたはこのようなことをすることができます:
SELECT T.f1, T.f2
FROM (SELECT NULL f1, 'a' f2) T
WHERE ((T.f1 IS NULL OR T.f2 IS NULL)
AND (T.f1 IS NOT NULL OR T.f2 IS NOT NULL))
OR T.f1 <> T.f2