クエリ(PostgresおよびInformix用)に、サブクエリを含むNOT IN
句が含まれていて、場合によってはNULL
値が返され、その句(およびクエリ全体)が何も返さなかった。
これを理解する最良の方法は何ですか?私はNULL
を値のないものと考えたため、クエリが失敗することを期待していませんでしたが、明らかにNULL
を正しく考える方法ではありません。
ブール論理-または 値論理
x NOT IN (1, 2, NULL)
はNOT (x = 1 OR x = 2 OR x = NULL)
と同じですx <> 1 AND x <> 2 AND x <> NULL
と同じですtrue AND true AND unknown
と同じ**unknown
**false
条件を渡さないため、この場合はWHERE
とほぼ同じです**これが、人々がEXISTS
+ NOT EXISTS
ではなくIN
+ NOT IN
を使用する理由です。詳細は インデックスに関連するNOTロジックの使用 も参照してください
**注:unknown
は、false
条件の式の最後のWHERE
と同じです。
式が評価されている間、それは不明です
理由については、以下の@kgrittnのコメントを参照してください