ปัญหาคือ NULL ไม่ถือว่าเท่ากับอะไรแม้แต่กับตัวมันเอง แต่ส่วนที่แปลกคือมันไม่เท่ากับตัวเอง
พิจารณาข้อความต่อไปนี้ (ซึ่งเป็น BTW ที่ผิดกฎหมายใน SQL Server T-SQL แต่ใช้ได้ใน My-SQL อย่างไรก็ตามนี่คือสิ่งที่ ANSI กำหนดให้เป็นโมฆะและสามารถตรวจสอบได้แม้ใน SQL Server โดยใช้คำสั่ง case เป็นต้น)
SELECT NULL = NULL -- Results in NULL
SELECT NULL <> NULL -- Results in NULL
ดังนั้นจึงไม่มีคำตอบจริง / เท็จสำหรับคำถาม แต่คำตอบนั้นเป็นโมฆะเช่นกัน
สิ่งนี้มีความหมายหลายอย่างเช่น
- งบกรณีซึ่งในค่า null ใด ๆ มักจะใช้ข้ออื่นเว้นแต่คุณจะใช้อย่างชัดเจนเมื่อไหร่จะมีสภาพเป็นโมฆะ ( ไม่เงื่อนไข )
WHEN NULL
- การต่อข้อมูลสตริงเป็น
SELECT a + NULL -- Results in NULL
- ในส่วนคำสั่ง WHERE IN หรือ WHERE NOT IN ราวกับว่าคุณต้องการผลลัพธ์ที่ถูกต้องตรวจสอบให้แน่ใจในแบบสอบถามย่อยที่สัมพันธ์กันเพื่อกรองค่า Null ใด ๆ
หนึ่งสามารถแทนที่พฤติกรรมนี้ใน SQL Server โดยการระบุSET ANSI_NULLS OFF
แต่ไม่แนะนำและไม่ควรทำเพราะอาจทำให้เกิดปัญหามากมายเพียงเพราะเบี่ยงเบนมาตรฐาน
(ตามหมายเหตุด้านข้างใน My-SQL มีตัวเลือกให้ใช้ตัวดำเนินการพิเศษ<=>
สำหรับการเปรียบเทียบค่าว่าง)
ในการเปรียบเทียบภาษาการเขียนโปรแกรมทั่วไป null ถือว่าเป็นค่าปกติและมีค่าเท่ากับตัวเองอย่างไรก็ตามค่า NAN ซึ่งไม่เท่ากับตัวมันเอง แต่อย่างน้อยก็คืนค่า 'false' เมื่อเปรียบเทียบกับตัวมันเอง (และ เมื่อตรวจสอบไม่เท่ากับภาษาการเขียนโปรแกรมที่แตกต่างกันมีการใช้งานที่แตกต่างกัน)
โปรดทราบว่าในภาษาพื้นฐาน (เช่น VB เป็นต้น) ไม่มีคำหลัก 'ว่าง' และแทนที่จะใช้คำหลัก 'ไม่มีอะไร' ซึ่งไม่สามารถใช้ในการเปรียบเทียบโดยตรงและแทนที่จะต้องการใช้ 'IS' เช่นเดียวกับใน SQL แต่ในความเป็นจริงแล้วมีค่าเท่ากับตัวเอง (เมื่อใช้การเปรียบเทียบทางอ้อม)