شرح صفوف ومحتوى الفقرة
في استعلامات LEFT JOIN، يختلف سلوك الاستعلام جذرياً بحسب موضع كتابة شرط التصفية الخاص بأعمدة الجدول الأيمن بين جملة ON وجملة WHERE:
- وضع الشرط داخل
ON(AND o.status = 'paid'): يُطبَّق الشرط أثناء عملية المطابقة؛ فيبقى جميع المستخدمين في النتيجة، وتُعرض طلباتهم المدفوعة فقط أوNULLإن لم توجد. - وضع الشرط داخل
WHERE(WHERE o.status = 'paid'): يُطبَّق الشرط بعد انتهاء الربط؛ وبما أن مقارنةNULL = 'paid'لا تتحقق، يتم حذف جميع المستخدمين غير المرتبطين، مما يحوّلLEFT JOINبالخطأ إلىINNER JOIN!
SQL
-- Filter right-table rows inside ON to preserve all left rows
SELECT
u.user_id,
u.full_name,
o.order_id,
o.total_amount
FROM users AS u
LEFT JOIN orders AS o
ON u.user_id = o.user_id
AND o.status = 'paid';