0Pricing
SQL Interview Prep · Aula

Como INNER JOIN faz correspondência entre linhas

O modelo mental de emparelhamento de linhas que facilita qualquer pergunta sobre junções.

Como INNER JOIN faz correspondência entre linhas é uma aula grátis de SQL Interview Prep no CoddyKit. Esta é a aula 1 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.

A primeira junção que os entrevistadores perguntam

Quando um entrevistador diz "faça a junção destas duas tabelas", quase sempre quer dizer INNER JOIN. É a junção padrão e a que revela se você realmente entende como as linhas são associadas.

Todo o assunto se resume a uma frase: uma junção interna considera todos os pares possíveis de linhas das duas tabelas e mantém apenas os pares que satisfazem a condição ON. Sem correspondência, a linha simplesmente desaparece do resultado.

Fixe esse modelo mental e todas as perguntas mais difíceis sobre junções ficarão mais fáceis.

Duas tabelas para analisar

Ao longo desta lição, usamos duas tabelas pequenas. customers contém quem fez os pedidos, e orders registra cada pedido e o cliente ao qual ele pertence.

  • customers(id, name)
  • orders(id, customer_id, amount)

A ligação entre elas é orders.customer_id = customers.id. Essa igualdade é o predicado da junção do qual todo o resultado depende.

customers
id | name
1  | Ada
2  | Bob
3  | Cleo   -- no orders yet

orders
id | customer_id | amount
10 | 1           | 50
11 | 1           | 20
12 | 2           | 99

A consulta básica com INNER JOIN

Eis a consulta canônica que o entrevistador espera ver. Observe as três partes: as duas tabelas, o JOIN ... ON que associa as linhas e as colunas projetadas.

A palavra-chave INNER é opcional em todos os principais bancos de dados. Escrever apenas JOIN significa INNER JOIN, mas escrevê-lo explicitamente sinaliza a intenção e evita ambiguidades em uma revisão de código.

SELECT c.name, o.amount
FROM customers AS c
INNER JOIN orders AS o
  ON o.customer_id = c.id;

Como é o resultado

Execute a consulta com nossos dados de exemplo e obtenha três linhas. Ada tem dois pedidos, então aparece duas vezes. Bob aparece uma vez.

Cleo desaparece. Ela não tem nenhum pedido correspondente, então a junção interna a remove completamente. Dizer explicitamente que as linhas sem correspondência desaparecem é o mais importante em uma entrevista sobre junções.

name | amount
Ada  | 50
Ada  | 20
Bob  | 99

O modelo mental de associação de linhas

Imagine que o banco de dados forme primeiro o produto cartesiano: cada cliente associado a cada pedido. Com 3 clientes e 3 pedidos, isso gera 9 pares candidatos.

Em seguida, ele aplica o predicado ON e mantém apenas os pares para os quais ele é verdadeiro. Dos 9 candidatos, somente 3 satisfazem o.customer_id = c.id.

Você não pensa dessa forma ao considerar o desempenho, mas esse é o modelo exato para responder a qualquer pergunta sobre "quantas linhas serão retornadas?".

Percorrendo os pares candidatos

Vamos acompanhar o processo. O comentário após cada par mostra se o predicado é verdadeiro.

Apenas as três linhas TRUE permanecem no resultado. Todo par que envolve Cleo (id 3) falha, então ela não contribui com nada.

-- customer.id vs order.customer_id
(Ada=1, ord10 cust=1)  -> TRUE  keep
(Ada=1, ord11 cust=1)  -> TRUE  keep
(Ada=1, ord12 cust=2)  -> FALSE
(Bob=2, ord10 cust=1)  -> FALSE
(Bob=2, ord12 cust=2)  -> TRUE  keep
(Cleo=3, anything)     -> FALSE (no order matches 3)

INNER JOIN é independente da ordem

Uma pergunta comum: faz diferença qual tabela vem primeiro? Para uma junção interna, não. Essas duas consultas retornam linhas idênticas porque a condição ON é simétrica.

O otimizador pode ler qualquer uma das tabelas primeiro, independentemente de como você escreve a consulta. (Isso NÃO é verdade para as junções LEFT/RIGHT, que veremos mais adiante.)

-- These return the same rows
SELECT c.name, o.amount
FROM customers c JOIN orders o ON o.customer_id = c.id;

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

Espera-se o uso de apelidos de tabela

Os entrevistadores querem apelidos curtos e claros. Compare a versão detalhada com nomes totalmente qualificados à versão limpa usando apelidos.

Os apelidos também se tornam obrigatórios quando um nome de coluna existe nas duas tabelas. Selecionar um id sem qualificação aqui geraria um erro de coluna ambígua, portanto escreva c.id ou o.id.

-- verbose
SELECT customers.name, orders.amount
FROM customers JOIN orders
  ON orders.customer_id = customers.id;

-- aliased, preferred
SELECT c.name, o.amount
FROM customers c JOIN orders o
  ON o.customer_id = c.id;

Junções com mais de uma coluna

O predicado ON não se limita a uma única igualdade. Quando uma relação é definida por uma chave composta, combine as condições com AND.

Aqui, um preço se aplica por produto e por região, portanto a correspondência precisa alinhar as duas colunas. Os entrevistadores usam isso para verificar se você não memorizou apenas junções com uma única coluna.

SELECT s.units, p.unit_price
FROM sales s
INNER JOIN price_list p
  ON p.product_id = s.product_id
 AND p.region     = s.region;

Também existem junções não baseadas em igualdade

A condição ON pode ser qualquer expressão booleana, não apenas =. Uma junção não baseada em igualdade usa intervalos ou desigualdades. Um exemplo clássico agrupa uma pontuação em uma faixa de notas.

Cada pontuação corresponde à única faixa cujo intervalo a contém. Mencionar que as junções não se restringem à igualdade é uma maneira rápida de demonstrar experiência.

SELECT s.student, g.grade
FROM scores s
INNER JOIN grades g
  ON s.points >= g.min_points
 AND s.points <= g.max_points;

JOIN explícito vs. junção por vírgula

Você ainda encontrará a antiga sintaxe de junção por vírgula em código legado e em algumas perguntas de entrevista. Estas duas consultas são equivalentes para um INNER JOIN.

Prefira a forma explícita JOIN ... ON. É fácil digitar a sintaxe com vírgula incorretamente e criar um produto cartesiano acidental (por esquecer o WHERE), exatamente o erro que os entrevistadores esperam identificar.

-- old implicit join
SELECT c.name, o.amount
FROM customers c, orders o
WHERE o.customer_id = c.id;

-- modern explicit join (preferred)
SELECT c.name, o.amount
FROM customers c
JOIN orders o ON o.customer_id = c.id;

Verificação rápida

Teste a ideia central das correspondências do INNER JOIN.

Recapitulação: como o INNER JOIN faz correspondências

Os pontos principais para repetir em uma entrevista:

  • O INNER JOIN mantém somente pares correspondentes; as linhas sem correspondência de qualquer lado desaparecem.
  • Modelo mental: forme todos os pares candidatos e depois mantenha aqueles em que o predicado ON é verdadeiro.
  • Ele é independente da ordem, e a palavra-chave INNER é opcional.
  • ON pode usar chaves compostas, intervalos e desigualdades, não apenas um único =.
  • Use JOIN ... ON explícito com apelidos claros para evitar erros de coluna ambígua e de produto cartesiano acidental.

Perguntas Frequentes

A aula “Como INNER JOIN faz correspondência entre linhas” é grátis?

Sim — o texto completo de “Como INNER JOIN faz correspondência entre linhas” é 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 “Como INNER JOIN faz correspondência entre linhas”?

O modelo mental de emparelhamento de linhas que facilita qualquer pergunta sobre junções. 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 1 de 4.

Quanto tempo leva a aula “Como INNER JOIN faz correspondência entre linhas”?

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. Como INNER JOIN faz correspondência entre linhas
  2. ON versus WHERE em junções
  3. Expansão de junções e multiplicação de linhas
  4. Unindo três ou mais tabelas
← Voltar para SQL Interview Prep