技術的興味からの質問です、よろしくお願いします。
ずっと以前に、NULL同士の比較は常にfalseになるというようなことを学習した記憶があり、
なんとなく覚えていたのですが、プログラミング言語ではそうでは無いようで、
どうもSQLに関する記憶のようです。
とりあえず、分かる範囲のプログラミング言語で、試してみました。
Ruby
1puts nil === nil ? true : false
JavaScript
1alert(null === null ? true : false);
PHP
1echo null === null ? true : false;
Python
1print("true" if None == None else "false")
C#
1C# 2using System; 3 4namespace HelloCS 5{ 6 class MainClass 7 { 8 public static void Main (string[] args) 9 { 10 Console.WriteLine (null == null ? true : false); 11 } 12 } 13}
Java
1public class HelloNull { 2 3 public static void main(String[] args) { 4 System.out.println(null == null ? true : false); 5 } 6 7}
これらは、すべてtrueを返すので、通常のプログラミング言語では、
null同士の比較はtrueを返すのが普通だと考えて良さそうです。
(もし違うものがあれば、ご指摘ください)
RDBに関しては、いろいろな環境ですぐには、試せないので検索してみたのですが、
Oracle,SQLServer,MySQL,PostgreSQLは、 null = null
の演算は、falseを返すようです。
ただし、PostgreSQLは、transform_null_equals という設定で変更できるようで、Microsoft Accessとの互換性の為のような記述もありましたが、ちょっと読み解けませんでした。
一応、SQL-92 という仕様書?も目を通してみたのですが、私は英語が読めず、nullで検索すると462箇所も該当するので、心が折れました。
なので、仕様として決まっているのかどうかは、わからない状態です。
そのようなことも踏まえて、ここで、やっと質問なのですが、
仕様でもし、null同士の比較がfalseだと決まっているとしても
なぜ、SQL(RDB)は、プログラミング言語とは、違い null = null
がfalseを返すのでしょうか?
データを比較する際にnull同士が同じとされては都合が悪いというようなことだとは思うのですが、
漠然とした理解のままとなってしまうので、はっきりとした理由があれば知りたいと思いました。
はっきりとした回答が得られれば一番良いですが、あーでもないこーでもないというレベルの回答でも構いません。
ちなみに ご興味がある方は、ここまでで上げた以外の、プログラミング言語や、
RDBでの結果をチェックして教えて頂けますと幸いです。
では、よろしくお願い致します。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/07/17 14:49
2016/07/17 14:58
2016/07/17 15:02
2016/07/17 17:00