0Pricing
SQL Interview Prep · Aula

Escolhendo o tipo correto de junção

Aprenda um método de decisão para escolher a junção correta a partir de um problema descrito em palavras.

Escolhendo o tipo correto de junção é uma aula grátis de SQL Interview Prep no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de SQL Interview Prep, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de SQL Interview Prep inclui 4 aulas no total.

Escolhendo a Junção a Partir de um Problema Descrito em Palavras

A habilidade de maior valor em uma entrevista não é a sintaxe, mas traduzir um requisito em linguagem comum para o tipo correto de junção. A maioria dos candidatos sabe como cada junção funciona, mas fica bloqueada quando precisa escolher uma sob pressão.

Esta lição oferece uma estrutura de decisão repetível para que você consiga indicar a junção correta em poucos segundos.

A Pergunta Central: Quais Linhas Precisam Permanecer?

Toda escolha de junção se resume a uma pergunta: quais linhas sem correspondência de cada lado você precisa manter?

  • Manter apenas as linhas correspondentes dos dois lados: INNER JOIN.
  • Manter todas as linhas da esquerda, correspondentes ou não: LEFT JOIN.
  • Manter todas as linhas dos dois lados: FULL OUTER JOIN.
  • Manter todas as combinações: CROSS JOIN.

Decida primeiro o que precisa permanecer; o tipo de junção será determinado automaticamente.

Palavras Indicadoras de INNER JOIN

Frases como 'clientes que fizeram um pedido,' 'produtos que têm avaliações,' ou 'pedidos junto com seu cliente' implicam que uma correspondência deve existir nos dois lados. Isso é um INNER JOIN.

Se descartar linhas sem correspondência for aceitável ou desejado, INNER JOIN é a opção padrão e a mais eficiente.

SELECT c.name, o.order_id
FROM customers c
JOIN orders o ON o.customer_id = c.id;

Palavras Indicadoras de LEFT JOIN

Frases como 'todos os clientes, incluindo aqueles sem pedidos,' ou 'liste todos os produtos e a quantidade de avaliações de cada um (zero se não houver nenhuma)' significam que você precisa preservar a tabela da esquerda independentemente das correspondências. Isso é um LEFT JOIN.

As palavras que denunciam essa necessidade são 'todos,' 'incluindo aqueles sem,' e 'mesmo que não haja nenhum.'

SELECT c.name, COUNT(o.order_id) AS orders
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
GROUP BY c.id, c.name;

Palavras Indicadoras da Antijunção

Frases como 'clientes que nunca fizeram pedidos,' 'produtos sem vendas,' ou 'funcionários sem gerente' pedem linhas que não tenham nenhuma correspondência. Esta é a antijunção: LEFT JOIN mais WHERE right_key IS NULL (ou NOT EXISTS).

A palavra-chave é 'nunca,' 'nenhum,' ou 'sem.'

SELECT c.name
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
WHERE o.order_id IS NULL;

Palavras Indicadoras de FULL OUTER JOIN

Frases como 'concilie duas listas e mostre as entradas ausentes de qualquer lado' ou 'compare as contas do mês passado com as deste mês, sinalizando tanto as novas quanto as removidas' exigem manter as linhas sem correspondência de ambas as tabelas. Isso é um FULL OUTER JOIN.

Problemas de reconciliação e comparação de diferenças são os gatilhos típicos.

SELECT a.id, b.id
FROM last_month a
FULL OUTER JOIN this_month b ON a.id = b.id
WHERE a.id IS NULL OR b.id IS NULL;

Palavras Indicadoras de CROSS JOIN

Frases como 'cada tamanho em cada cor,' 'uma linha por loja por dia, mesmo quando não houve vendas,' ou 'todas as combinações possíveis' apontam para um CROSS JOIN.

O indício é 'cada... em cada' ou 'todas as combinações,' quando não existe uma condição de correspondência entre os dois conjuntos.

SELECT s.size, c.color
FROM sizes s
CROSS JOIN colors c;

Palavras Indicadoras de SELF JOIN

Frases que relacionam uma linha a outra linha na mesma tabela, como 'cada funcionário e seu gerente,' 'pares de usuários na mesma cidade,' ou 'encontrar e-mails duplicados,' indicam uma autojunção.

A pista é que uma entidade faz referência a outra ou é comparada com outra do mesmo tipo.

SELECT e.name, m.name AS manager
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.id;

Uma Tradução Comentada

Enunciado: 'Mostre todos os produtos e quantas vezes foram pedidos no mês passado, incluindo os produtos que nunca foram pedidos.'

Decodificação: 'todos os produtos' mais 'incluindo os que nunca foram pedidos' significa preservar todas as linhas de produtos; portanto, faça um LEFT JOIN entre produtos e pedidos e depois aplique COUNT ao lado dos pedidos (que resulta em 0 para produtos sem correspondência, porque COUNT ignora NULL).

SELECT p.name, COUNT(o.order_id) AS times_ordered
FROM products p
LEFT JOIN orders o
  ON o.product_id = p.id
 AND o.order_date >= DATE '2024-05-01'
GROUP BY p.id, p.name;

Uma Armadilha Comum: Filtro em ON vs WHERE

Na consulta anterior, o filtro de data fica na cláusula ON, não em WHERE. Isso mantém os produtos com zero pedidos que atendem aos critérios.

Se você movesse order_date >= ... para WHERE, as linhas NULL dos produtos sem correspondência seriam descartadas, transformando silenciosamente o LEFT JOIN em um INNER JOIN e eliminando justamente os produtos que o enunciado pedia para manter.

-- WRONG: WHERE on the outer table removes unmatched products
-- ...
-- LEFT JOIN orders o ON o.product_id = p.id
-- WHERE o.order_date >= '2024-05-01'  <-- becomes an inner join

A Estrutura de Decisão

Passe qualquer problema de junção descrito em palavras por esta lista de verificação:

  • A mesma tabela está relacionada consigo mesma? -> SELF JOIN (e considere uma CTE recursiva se a profundidade não tiver limite).
  • Todas as combinações, sem condição? -> CROSS JOIN.
  • Apenas linhas correspondentes? -> INNER JOIN.
  • Manter todas as linhas de um dos lados? -> LEFT JOIN.
  • Manter as linhas sem correspondência dos dois lados? -> FULL OUTER JOIN.
  • Linhas sem correspondência? -> antijunção (LEFT JOIN + IS NULL).

Verificação Rápida

Aplique a estrutura a um problema descrito em palavras.

Recapitulação: Escolhendo o Tipo Correto de Junção

Principais conclusões:

  • Comece toda decisão de junção perguntando quais linhas sem correspondência precisam permanecer.
  • Associe as palavras indicadoras: 'todos/incluindo' -> LEFT, 'nunca/nenhum' -> antijunção, 'cada... em cada' -> CROSS, 'cada X e seu X' -> SELF, reconciliação -> FULL OUTER.
  • Mantenha os filtros de junções externas na cláusula ON; um filtro em WHERE pode transformar silenciosamente um LEFT JOIN em um INNER JOIN.
  • Explique a estrutura em voz alta nas entrevistas; isso demonstra raciocínio, não memorização.

Perguntas Frequentes

A aula “Escolhendo o tipo correto de junção” é grátis?

Sim — o texto completo de “Escolhendo o tipo correto de junção” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de SQL Interview Prep, atualize para CoddyKit PRO. O curso de SQL Interview Prep inclui 4 aulas no total.

O que vou aprender em “Escolhendo o tipo correto de junção”?

Aprenda um método de decisão para escolher a junção correta a partir de um problema descrito em palavras. Você pratica SQL Interview Prep com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar SQL Interview Prep?

Nenhuma experiência prévia é necessária. SQL Interview Prep no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “Escolhendo o tipo correto de junção”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de SQL Interview Prep?

Sim. Cada aula de SQL Interview Prep inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. CROSS JOIN e produtos cartesianos
  2. SELF JOIN para hierarquias
  3. Comparando linhas dentro de uma tabela
  4. Escolhendo o tipo correto de junção
← Voltar para SQL Interview Prep