OracleのNULLの扱いについて

NULL 同士で結合した場合はどうなるのか?
検証結果を紹介する。



検証

テーブル作成

SQL> create table test( col1 char(10), col2 char(10) );
SQL> create table test2( col1 char(10), col2 char(10) );

データ作成

SQL> insert into test(col1) values('1');
SQL> insert into test2(col1) values('1');
SQL> commit;

col2 は NULL となっている。

col1 で結合

SQL> select * from test, test2 where test.col1 = test2.col1;


COL1       COL2       COL1       COL2      
---------- ---------- ---------- ----------
1                     1

当然、結果が返る。

col2 で結合

SQL> select * from test, test2 where test.col2 = test2.col2;

レコードが選択されませんでした。

NULLのjoinは真にならない

つまり結果から、「NULL = NULL」 の結果は真にならないことが分かる。

もし無理やりでも真としたいのなら、nvl 関数で
nvl(test.col2,’ ‘) = nvl(test2.col2,’ ‘)
のようにスペース同士で結合させればよい。