Một cách chính xác. NULL
đại diện cho một giá trị không xác định, không phải bất kỳ giá trị cụ thể nào (nó không giống với NULL
bằng C hoặc nil
trong Ruby, v.v.) Trong SQL, nếu bạn so sánh một thứ gì đó với giá trị không xác định, kết quả cũng không xác định. Và bạn sẽ không nhận được các hàng mà WHERE
tình trạng không xác định.
Hãy thử điều này:
SELECT NULL <> 2;
và bạn sẽ thấy NULL
kết quả là.
Hãy thử điều này:
SELECT * FROM t WHERE NULL;
và không có hàng nào xuất hiện, ngay cả khi bảng t
rất lớn.
Nếu bạn thực sự cần những gì bạn đã nói là bạn muốn (và tôi không ủng hộ điều này), bạn có thể làm điều gì đó như sau:
SELECT T.f1, T.f2
FROM (SELECT NULL f1, 'a' f2) T
WHERE ((T.f1 IS NULL OR T.f2 IS NULL)
AND (T.f1 IS NOT NULL OR T.f2 IS NOT NULL))
OR T.f1 <> T.f2