回答:
ブール論理-または3値論理
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
です。また、参照インデックスとの関係ではありませんロジックの使用を多くのため
**注:条件の式の最後unknown
と同じです。
式が評価されている間は不明
です。理由については、以下の@kgrittnのコメントを参照してください。false
WHERE
NULL NOT IN (some_subquery)
、行をsome_subquery
返さない場合を除き、外側の行を返さないでください。これが、両方の列がNull可能の場合の実行計画がかなり高価になる理由です。SQL Serverの例
x <> NULL
解決すると見なす場合FALSE
、NOT (x <> NULL)
に評価することが期待されますがTRUE
、そうではありません。 両方とも評価されUNKNOWN
ます。トリックは、WHERE
句(存在する場合)が評価される場合にのみ行が選択TRUE
されることです。句がFALSE
またはに評価される場合、行は省略されますUNKNOWN
。この動作(一般的にNOT IN
は、特に述語の場合)は、SQL標準で義務付けられています。