SQL JOIN explicado com exemplos (Inner, Left, Right, Full)

SQL joins explained with examples: inner, left, right, full, cross and self joins
  1. Início
  2. Blog
  3. Bancos de dados e SQL

Bancos de dados e SQL

SQL JOIN explicado com exemplos (Inner, Left, Right, Full)

Aprenda os joins INNER, LEFT, RIGHT, FULL, CROSS e SELF com duas tabelas pequenas, consultas claras e os resultados exatos.

Por Stack QuoraAtualizado em 29 out. 20268 min de leitura
SQLSQL JOINexplicado com exemplosstackquora.com

Principais pontos

  • INNER JOIN: apenas as linhas que correspondem nas duas tabelas.
  • LEFT JOIN: todas as linhas da esquerda, com as correspondências (NULL se não houver).
  • RIGHT JOIN: todas as linhas da direita, com as correspondências.
  • FULL JOIN: todas as linhas das duas tabelas, combinadas quando possível.
  • Faça join por chaves, use aliases de tabela e indexe as colunas do join.

Bancos de dados reais não guardam tudo em uma única tabela. Os clientes ficam em uma tabela e os pedidos em outra. Para responder “quais clientes fizeram pedidos neste mês?”, é preciso combiná-las, e é isso que os joins SQL fazem.

Este guia é prático. Os joins confundem iniciantes porque as mesmas duas tabelas dão resultados diferentes conforme o tipo de join. Com dados pequenos e concretos, tudo fica simples.

SQL JOIN explicado: tabelas de exemplo

customers

id name
1 Asha
2 Ben
3 Chitra

orders

id customer_id total
101 1 250
102 1 120
103 2 90
104 9 40

Chitra não tem pedidos, e o pedido 104 aponta para um cliente (9) que não existe. Esses dois casos extremos mostram a diferença entre os tipos de join.

INNER JOIN

O INNER JOIN retorna apenas as linhas em que a condição é verdadeira nas duas tabelas. As linhas sem par são descartadas.

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

Resultado: Asha (101), Asha (102), Ben (103). Chitra e o pedido 104 ficam de fora. Use-o quando só importam os dados relacionados, como pedidos com os detalhes do cliente. Escrever apenas JOIN significa INNER JOIN.

LEFT JOIN

O LEFT JOIN mantém todas as linhas da tabela da esquerda e acrescenta as linhas correspondentes da direita. Onde não há correspondência, as colunas da direita ficam NULL.

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

Resultado: Asha (101), Asha (102), Ben (103), Chitra (NULL, NULL). Agora Chitra aparece.

Dica rápida: para achar clientes que nunca pediram, filtre o NULL do lado direito: WHERE o.id IS NULL retorna Chitra. Testadores usam isso para encontrar registros órfãos ou ausentes.

RIGHT JOIN e FULL JOIN

O RIGHT JOIN é o espelho do LEFT JOIN e mantém todas as linhas da direita. A maioria troca a ordem das tabelas e usa LEFT JOIN, que é mais natural de ler.

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

O resultado inclui o pedido 104 com nome de cliente NULL. O FULL (OUTER) JOIN retorna todas as linhas das duas tabelas: Chitra sem pedido e o pedido 104 sem cliente.

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

PostgreSQL e SQL Server oferecem suporte. O MySQL não; combine LEFT JOIN e RIGHT JOIN com UNION. Para se aprofundar, o manual do PostgreSQL tem um tutorial de joins claro.

Join Só linhas da esquerda Só linhas da direita Linhas correspondentes
INNER Não Não Sim
LEFT Sim Não Sim
RIGHT Não Sim Sim
FULL Sim Sim Sim

CROSS JOIN e SELF JOIN

O CROSS JOIN combina cada linha de uma tabela com cada linha da outra: três clientes e quatro pedidos geram doze linhas. É raro, mas útil para gerar combinações, como dados de teste para cada tamanho e cor.

SELECT c.name, o.id
FROM customers c
CROSS JOIN orders o;

O SELF JOIN une uma tabela a ela mesma usando aliases, por exemplo para achar o gerente de cada funcionário.

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

SQL JOIN: erros comuns e dicas de desempenho

  • Esquecer a cláusula ON cria um CROSS JOIN sem querer e faz o número de linhas explodir.
  • Filtrar a tabela da direita no WHERE após um LEFT JOIN o transforma em INNER JOIN; coloque a condição no ON.
  • Nomes de coluna ambíguos: prefixe as colunas com o alias da tabela.
  • Fazer join por colunas não únicas multiplica linhas e infla os totais.
  • Indexe as colunas do join, selecione só as colunas necessárias e analise consultas lentas com EXPLAIN.

Por que os joins importam para testadores

Engenheiros de QA usam joins para verificar se os dados criados pela interface ou pela API chegaram corretamente ao banco e para achar registros órfãos. Leia junto com nosso guia de testes de API com Postman (em inglês). Para o básico, veja o tutorial de SQL para iniciantes (em inglês) e, para novos armazenamentos, os bancos de dados vetoriais (em inglês). Para rodar um banco localmente, veja o tutorial de Docker (em inglês).

Considerações finais

SQL JOIN em uma linha: INNER mantém só o que combina, LEFT mantém tudo da esquerda, RIGHT tudo da direita e FULL mantém tudo. Pratique com duas tabelas pequenas até prever o resultado antes de executar a consulta; depois faça join de três tabelas e combine joins com GROUP BY.

Perguntas frequentes

Qual é a diferença entre INNER JOIN e LEFT JOIN?

O INNER JOIN retorna apenas as linhas correspondentes nas duas tabelas. O LEFT JOIN retorna todas as linhas da tabela da esquerda e preenche com NULL as colunas da direita sem correspondência.

Qual SQL JOIN é o mais rápido?

Nenhum tipo é sempre o mais rápido. O desempenho depende de índices, tamanho das tabelas e plano de execução. Indexe as colunas do join e confira o plano.

O MySQL suporta FULL OUTER JOIN?

Não. No MySQL, combine LEFT JOIN e RIGHT JOIN com UNION para obter o mesmo resultado.

Para que serve um SELF JOIN?

O SELF JOIN compara linhas da mesma tabela, como achar o gerente de cada funcionário em uma única tabela employees.

Por que meu join retorna linhas duplicadas?

Duplicatas aparecem quando a coluna do join não é única em uma das tabelas. Verifique suas chaves ou agregue os dados antes do join.

Continue aprendendo (artigos em inglês)

Trabalhe com a Stack Quora

Precisa de ajuda com testes, WordPress ou SEO?

Ajudamos equipes a entregar software melhor e a fazer seus sites crescerem. Conte no que está trabalhando e sugeriremos o próximo passo.

Continue lendo

Mais guias sobre testes, IA e desenvolvimento moderno

Gostou deste artigo? Escolha um tópico e vá direto para nossos tutoriais mais recentes.