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 値を結果から除外することをお勧めします。