شرح صفوف ومحتوى الفقرة
عند البحث عن السجلات غير المرتبطة، يُعد الاختيار بين NOT EXISTS وNOT IN قراراً حاسماً لسلامة النتائج متى كان العمود الداخلي يقبل القيمة الفارغة NULL:
- تعطل
NOT INبوجودNULL: إذا كان العمودorders.user_idيقبلNULL(للطلبات كضيف) ووجد صف واحد فارغ، فإنNOT IN (SELECT user_id FROM orders)يرجع صفراً من الصفوف دائماً. - أمان
NOT EXISTSالتام مع الفارغ: لأنEXISTSيفحص فقط هل أرجع الشرطo.user_id = u.user_idصفاً فعلياً أم لا، فإنNOT EXISTSلا يتأثر أبداً بوجود قيمNULLفي الجدول الداخلي.
SQL
-- Null-safe check for customers without orders even if guest NULLs exist
SELECT
u.user_id,
u.full_name
FROM users AS u
WHERE NOT EXISTS (
SELECT 1
FROM orders AS o
WHERE o.user_id = u.user_id
);