今天突然才發現,Oracle中的“不等於操作符”是忽略Null的。
比如,查詢comm不等於的300的記錄,我會理所當然地使用where comm != 300
預想會返回包含Null的不等於300的記錄(意識里認為Null也是“不等於30”的其中一種情況)。
而實際上,它只返回不為Null且不等於300的記錄,見如下測試。
使用SCOTT的公共數據測試:

--All data select * from scott.emp t; --Not equal 300(Not contain null) select * from scott.emp t where t.comm != 300; --Not equal 300(Does contain null) select * from scott.emp t where t.comm != 300 or t.comm is null;
只返回comm不為null並且不等於300的記錄。
事實上,並不僅僅“不等於號”與Null的關系是如此的,其他操作符也類似,只不過“不等於號”使用場景的特殊性讓我們容易發覺此特性。
其中原因在於Null,關於Null的各種情況說明可見以下Oracle的文檔:
http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements005.htm
PS,見“寓言因永吟”回復。亦可使用LNNVL方法以解決此問題,具體Oracle文檔描述如下:
http://docs.oracle.com/cd/E11882_01/server.112/e26088/functions091.htm