「達人に学ぶSQL徹底指南書」を読む(1) − 集合演算子は nullとnullを「等しい」とみなす。なぜ?
達人に学ぶ SQL徹底指南書 (CodeZine BOOKS)
- 作者: ミック
- 出版社/メーカー: 翔泳社
- 発売日: 2008/02/07
- メディア: 単行本(ソフトカバー)
- 購入: 54人 クリック: 1,004回
- この商品を含むブログ (78件) を見る
まだ読み終わってないんだけど、思うところをぽつぽつ書いていきます。
P-125で、2つのテーブルの内容が等しいかどうかをチェックするクエリ*1
select count(*) from ( select * from tbl_A union select * from tbl_B ) TMP
について、
このクエリは、NULLを含むテーブルにも正しく動作しますし、列数や列名、データ型を
一切指定せずに使えるのが便利なところです。
てサラッと書いてあるんだけど、太字にしたところで軽いショックを受けた。
考えたこと無かったんだけど、言われてみれば集合演算子では NULLイコールNULL だ。NULL≠NULLであるNULLイコールNULLではない比較演算子と挙動が違う理由がわからない。
たぶん集合演算子と比較演算子は背景の理論が違うからなのだと思うが、集合演算子が NULLイコールNULL と判断する、数学的・論理学的な裏付けとはいったい何でしょう。
*1:このクエリと、select count(*) from tbl_A と、select count(*) from tbl_B が全部同じ結果を返したら、2つのテーブルの内容が等しいという話