Null 值與聯結

當資料表的資料行中有 Null 值時,Null 值彼此並不相符。若所要聯結之資料表的資料行中出現 Null 值,它只能藉由使用外部聯結來傳回 (除非 WHERE 子句可排除 Null 值)。

以下列出兩個資料表,而每個資料表都有 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 的一個資料列會被傳回:

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

(1 row(s) affected)

基底資料表傳回的 Null 值,也很難與外部聯結傳回的 Null 值作區分。例如,下列 SELECT 陳述式將對這兩個資料表進行左方外部聯結:

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 值出現在被聯結的資料中時,您最好透過使用一般聯結將它們從結果中刪除。