NULL có hành vi đặc biệt:so sánh bất cứ thứ gì với NULL sẽ trả lại cho bạn một NULL , là một cái gì đó khác với false hoặc 0 . Nó có nghĩa là "không xác định".
Ví dụ:lấy bảng sau:
user_id | gender
------------------
1 | NULL
2 | 'M'
3 | 'F'
4 | 'F'
SELECT * FROM mytable WHERE gender = 'M' sẽ trả về 1 hàng, như mong đợi
SELECT * FROM mytable WHERE gender != 'M' sẽ trả về 2 hàng, KHÔNG phải 3 hàng.
SELECT * FROM mytable WHERE gender != 'M' OR gender IS NULL sẽ trả về 3 hàng mong đợi.
Chỉnh sửa:Đối với một số ứng dụng, sử dụng 0 (hoặc, xin Chúa cấm, một "số ma thuật" khác) thay vì NULL thậm chí không được khuyến khích (đơn vị hoặc giá trị chính xác không liên quan trong ví dụ này):
Date | Temperature
--------------------------
2010-01-01 | 10
2010-01-02 | 4
2010-01-03 | 0
2010-01-04 | -22
2010-01-05 | -45
2010-01-06 | NULL
2010-01-07 | -34
Đây, NULL vào ngày 6 tháng 1 có nghĩa là "giá trị không xác định" - có thể do nhiệt độ quá thấp nên đầu dò nhiệt kế ngừng phản hồi. Tuy nhiên, nó có ý nghĩa hoàn toàn khác với ngày 3 tháng 1, khi nhiệt độ là 0 , nghĩa là, 0 độ.
Ngoài ra, như @Bill Karwin đã đề cập, NULL hoạt động đặc biệt trong các hàm tổng hợp (COUNT , SUM , AVG v.v.):tính toán AVG(Temperature) trên dữ liệu trên sẽ cung cấp cho bạn -14.5 , vì hàng NULL bị bỏ qua.