عند استخدام LEFT JOIN، يؤثر موضع الشرط في الصفوف التي يحتفظ بها الاستعلام. إذا أردنا عرض جميع العملاء مع طلباتهم المدفوعة فقط، نضع شرط الدفع داخل ON. بذلك يبحث الربط عن الطلبات المدفوعة بوصفها المطابقات المقبولة، ويحتفظ بالعميل حتى إذا لم يجد طلبا يحقق هذه الشروط.
أما وضع o.status = 'paid' داخل WHERE فيختبر الصفوف الناتجة بعد الربط. الصف الذي لا يملك طلبا مطابقا يحتوي على NULL في حالة الطلب، فلا يحقق المقارنة ويستبعد. كذلك يستبعد العميل الذي لا يملك سوى طلبات بحالات أخرى.
مثال
SELECT c.id, o.id AS order_id
FROM customers AS c
LEFT JOIN orders AS o
ON o.customer_id = c.id
AND o.status = 'paid';
اختيار الموضع الصحيح يبدأ بتحديد المطلوب: هل حالة الطلب شرط لقبول المطابقة، أم شرط لاستبعاد صفوف النتيجة النهائية؟ هذا الفرق أساسي في التقارير التي يجب أن تحتفظ بجميع العملاء.
باختصار: ضع شرط الطلب داخل ON عندما تريد الاحتفاظ بالعميل حتى عند غياب طلب يحقق الشرط.
هل تريد تعلّم SQL خطوة بخطوة مع تمارين عملية؟ تابع مسار SQL من الأساسيات للاحتراف.