SQL ServerでのNULLと空文字の区別

SQL ServerではNULLと空文字('')を区別するらしい。例を追って検証してみる。

環境

検証

以下のテーブル「猫マスタ」があったとする。

ID 名前 カリカ
111 すだち シーバ
222 ちろこ フリスキー
333 ごん モンプチ

これをそれぞれNULLと空文字('')、半角スペース1桁で更新する。

UPDATE 猫マスタ SET カリカリ = NULL WHERE ID = 111
UPDATE 猫マスタ SET カリカリ = '' WHERE ID = 222
UPDATE 猫マスタ SET カリカリ = ' ' WHERE ID = 333
ID 名前 カリカ
111 すだち  
222 ちろこ  
333 ごん  



いずれも見た目はNULLのように見える。
しかし実際はNULLと空文字は内部で区別されている。

SELECT * FROM 猫マスタ WHERE カリカリ IS NULL
ID 名前 カリカ
111 すだち  
SELECT * FROM 猫マスタ WHERE カリカリ = ''
ID 名前 カリカ
222 ちろこ  



さらにスペース値に対するRTRIM,LTRIM関数は空文字になるので注意。

SELECT * FROM 猫マスタ WHERE RTRIM(カリカリ) IS NULL
ID 名前 カリカ
111 すだち  
SELECT * FROM 猫マスタ WHERE RTRIM(カリカリ) = ''
ID 名前 カリカ
222 ちろこ  
333 ごん  

補足

空文字('')はSPACE関数でも表現できる。

SELECT * FROM 猫マスタ WHERE カリカリ = SPACE(0)
ID 名前 カリカ
222 ちろこ