INNER JOIN MAIS COMUM
Retorna apenas as linhas que têm valores correspondentes nas duas tabelas. É o tipo de JOIN padrão e o mais usado.
SELECT orders.id, customers.name, orders.amount
FROM orders
INNER JOIN customers
ON orders.customer_id = customers.id
Pontos principais:
- Retorna apenas registros correspondentes das duas tabelas
- Filtra automaticamente as linhas sem correspondência
- JOIN mais eficiente em desempenho
- Pode ser escrito apenas como
JOIN (o INNER fica implícito)
📚 Saiba mais: SQL JOINs para iniciantes, Guia de joins no MySQL, Guia de joins no SQL Server
LEFT JOIN
Retorna todas as linhas da tabela da esquerda e as linhas correspondentes da tabela da direita. Se não houver correspondência, são retornados valores NULL nas colunas da tabela da direita.
SELECT customers.name, orders.amount
FROM customers
LEFT JOIN orders
ON customers.id = orders.customer_id
Pontos principais:
- Preserva todos os registros da tabela da esquerda (primeira)
- Valores NULL aparecem nas colunas sem correspondência da tabela da direita
- Também conhecido como LEFT OUTER JOIN
- Útil para encontrar registros sem dados relacionados
📚 Saiba mais: SQL JOINs para iniciantes, Guia de joins no MySQL, Guia de joins no SQL Server
RIGHT JOIN
Retorna todas as linhas da tabela da direita e as linhas correspondentes da tabela da esquerda. O oposto do LEFT JOIN.
SELECT orders.amount, customers.name
FROM orders
RIGHT JOIN customers
ON orders.customer_id = customers.id
Pontos principais:
- Preserva todos os registros da tabela da direita (segunda)
- Valores NULL aparecem nas colunas sem correspondência da tabela da esquerda
- Também conhecido como RIGHT OUTER JOIN
- Sempre pode ser reescrito como um LEFT JOIN
📚 Saiba mais: SQL JOINs para iniciantes, Guia de joins no MySQL, Guia de joins no SQL Server
FULL OUTER JOIN
Retorna todas as linhas das duas tabelas, com valores NULL onde não há correspondência em nenhuma das direções.
SELECT customers.name, orders.amount
FROM customers
FULL OUTER JOIN orders
ON customers.id = orders.customer_id
Pontos principais:
- Combina os resultados de LEFT e RIGHT JOIN
- Mostra todos os registros das duas tabelas
- Não é suportado no MySQL (use UNION no lugar)
- Útil para encontrar todos os relacionamentos e lacunas
📚 Saiba mais: SQL JOINs para iniciantes, Full Outer Join no MySQL, Guia de joins no SQL Server
CROSS JOIN USE COM CUIDADO
Retorna o produto cartesiano das duas tabelas - cada linha da primeira tabela combinada com cada linha da segunda tabela.
SELECT sizes.name, colors.name
FROM sizes
CROSS JOIN colors
SELECT sizes.name, colors.name
FROM sizes, colors
Pontos principais:
- Não precisa de cláusula ON (sem condição de join)
- Número de linhas do resultado = (linhas da tabela da esquerda × linhas da tabela da direita)
- Pode gerar rapidamente conjuntos de resultados enormes
- Útil para gerar combinações ou dados de teste
📚 Saiba mais: SQL JOINs para iniciantes, Cross Join no PostgreSQL
LEFT ANTI JOIN
Retorna as linhas da tabela da esquerda que não têm correspondência na tabela da direita. Útil para encontrar registros sem relacionamentos.
SELECT customers.name
FROM customers
LEFT JOIN orders
ON customers.id = orders.customer_id
WHERE orders.id IS NULL
SELECT customers.name
FROM customers
WHERE NOT EXISTS (
SELECT 1 FROM orders
WHERE orders.customer_id = customers.id
)
Pontos principais:
- Implementado com LEFT JOIN + WHERE IS NULL
- Encontra registros sem dados relacionados
- Também chamado de "LEFT EXCLUDING JOIN"
- Exemplo: clientes que nunca fizeram um pedido
RIGHT ANTI JOIN
Retorna as linhas da tabela da direita que não têm correspondência na tabela da esquerda. O oposto do LEFT ANTI JOIN.
SELECT orders.id
FROM customers
RIGHT JOIN orders
ON customers.id = orders.customer_id
WHERE customers.id IS NULL
SELECT orders.id
FROM orders
LEFT JOIN customers
ON orders.customer_id = customers.id
WHERE customers.id IS NULL
Pontos principais:
- Implementado com RIGHT JOIN + WHERE IS NULL
- Encontra registros órfãos na tabela da direita
- Sempre pode ser reescrito como LEFT ANTI JOIN
- Exemplo: pedidos sem um cliente válido