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,’ ‘)
のようにスペース同士で結合させればよい。