1-3 3値理論とNULL

1. 比較述語とNULL その1:排中律が成立しない

「命題とその否定を「または」でつなげてできる命題はすべて真である」というのが排中律。

2. 比較述語とNULL その2:CASE式とNULL

単純CASE式のCASE col_1 WHEN NULLは、col_1 = NULLの省略形なので、trueにならず思ったような動作にならない。

3. NOT INとNOT EXISTSは同値ではない

NOT INのサブクエリで使用されるテーブルの選択列にNULLが存在する場合、 SQL全体の結果は常に空になる。

EXITSはtruefalse しか返さない。そのため、INとEXISTSは同値変換が可能だが、NOT INとNOT EXISTSは同値ではない。

4. 限定述語とNULL

ALL述語は条件をANDで連結した論理式の省略形。

5. 限定述語と極値関数は同値ではない

極値関数は 集計の際にNULLを排除する入力が空集合だった場合はNULLを返す

比較対象が存在しない場合、全行を返すべきか1行も返さないべきか、判断が必要。

6. 集約関数とNULL

COUNT関数以外の集約関数も、入力が空の場合NULLを返す。

NULLを何らかの値に変換するか、帰ってきたNULLに対処するのかのどちらかを選ぶ必要がある。

まとめ

NULLみな死すべし、慈悲はない