Um JOIN combina linhas de duas tabelas casando uma condição, geralmente uma chave estrangeira. O tipo de join decide o que acontece com linhas que não têm correspondência do outro lado.
Um JOIN combina linhas de duas tabelas casando uma condição, geralmente uma chave estrangeira. O tipo de join decide o que acontece com linhas que não têm correspondência do outro lado.
NULL.-- customers(id, name) orders(id, customer_id, total)
-- INNER: only customers who have at least one order
SELECT c.name, o.total
FROM customers c
INNER JOIN orders o ON o.customer_id = c.id;
-- LEFT: every customer, even those with zero orders (total = NULL)
SELECT c.name, o.total
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id;
-- Classic use: find customers with NO orders
SELECT c.name
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
WHERE o.id IS NULL; -- the LEFT JOIN's NULL side reveals the gap
WHERE (ex.: WHERE o.total > 100) transforma silenciosamente um LEFT JOIN de volta em INNER JOIN, porque NULL > 100 é falso. Coloque essas condições na cláusula ON se quiser manter as linhas não casadas.A maioria das consultas reais atravessa várias tabelas, e o tipo de join errado descarta ou duplica linhas silenciosamente — um bug que retorna resultados plausíveis. Saber que LEFT JOIN + IS NULL encontra linhas "ausentes", e que um WHERE no lado nulo cancela o LEFT, previne toda uma classe de erros em relatórios.
Uma biblioteca de perguntas de entrevista de TI com respostas detalhadas — de Júnior a Sênior.
Doar