ปัญหา: <> NULL ไม่ทำงานเหมือน IS NOT NULL
ใน SQL การเปรียบเทียบกับ NULL ด้วยตัวดำเนินการทั่วไป (=, <>, !=, >, <) จะคืนค่า UNKNOWN (NULL) ไม่ใช่ TRUE/FALSE
ตัวอย่างการเปรียบเทียบกับ NULL
mysql> select 10 <> NULL; -- NULL
mysql> select NULL <> NULL; -- NULL
mysql> select 'Chris' <> NULL; -- NULL
mysql> select '' <> NULL; -- NULL
ทั้งหมดคืนค่า NULL (ไม่ใช่ 1 หรือ 0)
ตัวอย่างกับตาราง
mysql> create table DemoTable846(Value int);
mysql> insert into DemoTable846 values(NULL);
mysql> insert into DemoTable846 values(10);
ใช้ IS NOT NULL (ถูกต้อง)
mysql> select * from DemoTable846 where Value IS NOT NULL;
+-------+
| Value |
+-------+
| 10 |
+-------+
ใช้ <> NULL (ผิด - ได้ Empty set)
mysql> select * from DemoTable846 where Value <> NULL;
Empty set (0.00 sec)
เหตุผล
- NULL แทน "ค่าที่ไม่รู้จัก" การเปรียบเทียบอะไรกับ "ไม่รู้จัก" ก็จะได้ "ไม่รู้จัก"
- SQL ใช้ 3-valued Logic: TRUE, FALSE, UNKNOWN (NULL)
WHEREเก็บเฉพาะแถวที่เป็น TRUE เท่านั้น (UNKNOWN ถูกตัดทิ้ง)
สรุป
ต้องใช้ IS NULL / IS NOT NULL เท่านั้น สำหรับตรวจสอบ NULL อย่าใช้ =, <>, !=, >, < กับ NULL