INNER JOIN zwraca tylko wiersze pasujące w obu tabelach. LEFT JOIN zwraca wszystkie wiersze z lewej tabeli i uzupełnia brakujące dopasowania z prawej strony NULLami.
SELECT u.id, p.id
FROM users u
LEFT JOIN posts p ON p.user_id = u.id;Join łączy wiersze z dwóch tabel na podstawie warunku.
Klienci, którzy mają zamówienia (INNER):
SELECT c.id, o.id AS order_id
FROM customers c
JOIN orders o ON o.customer_id = c.id;Klienci nawet bez zamówień (LEFT):
SELECT c.id, o.id AS order_id
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id;Warunek na prawej tabeli w `WHERE` może odfiltrować `NULL` i „zabić” zachowanie left join:
-- To usuwa klientów bez zamówień
... LEFT JOIN orders o ON o.customer_id = c.id
WHERE o.status = 'PAID';Jeśli chcesz zachować wiersze z lewej, przenieś warunek do `ON`:
... LEFT JOIN orders o
ON o.customer_id = c.id AND o.status = 'PAID';