NULL 値と結合

結合されるテーブルの列に NULL 値がある場合、双方の NULL 値が互いに一致することはありません。結合されるいずれかのテーブルの列に複数の NULL 値がある場合にそれを返すのは、外部結合を使用した場合だけです。ただし WHERE 句によって NULL 値が除外される場合を除きます。

次に 2 つのテーブルを示しています。どちらのテーブルでも、結合に使われる列に NULL 値が含まれています。

table1                          table2
a           b                   c            d
-------     ------              -------      ------
      1        one                 NULL         two
   NULL      three                    4        four
      4      join4

列 a の値と列 c の値を比較する結合の場合、NULL 値を含む列は一致しません。

SELECT *
FROM table1 t1 JOIN table2 t2
   ON t1.a = t2.c
ORDER BY t1.a

列 a と列 c で返されるのは、値が 4 の行 1 つだけです。

a           b      c           d      
----------- ------ ----------- ------ 
4           join4  4           four   

(1 row(s) affected)

ベース テーブルから返される NULL 値と外部結合から返される NULL 値を区別することは困難です。たとえば、次の SELECT ステートメントは、2 つのテーブルの左外部結合を行います。

SELECT *
FROM table1 t1 LEFT OUTER JOIN table2 t2
   ON t1.a = t2.c
ORDER BY t1.a

以下に結果セットを示します。

a           b      c           d      
----------- ------ ----------- ------ 
NULL        three  NULL        NULL 
1           one    NULL        NULL 
4           join4  4           four   

(3 row(s) affected)

この結果では、データ内の NULL を、結合の失敗を表す NULL と区別するのが簡単ではありません。結合されるデータ内に NULL 値がある場合、通常は、普通の結合を使ってこれらの NULL 値を結果から除外することをお勧めします。