その通り。 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