Lorsque vous utilisez WHERE
condition sur la table de droite d'un LEFT JOIN
(Outer Join), il devient effectivement un INNER JOIN
, car WHERE
clause doit correspondre aux conditions. C'est pourquoi vous n'obtenez que des cas où c.active = 1
.
Vous devez déplacer le WHERE
condition à LEFT JOIN .. ON .. AND ..
condition :
SELECT
p.id, c.id as category_id
FROM
(SELECT id FROM products p WHERE p.id > 6319055 ORDER BY id LIMIT 1000) prods
LEFT JOIN
products p ON p.id = prods.id
LEFT JOIN
categories c ON c.id = p.category_id
AND c.active = 1