Pular para o conteúdo
Tecnologia

JOINs combinam dados de múltiplas tabelas. INNER, LEFT, RIGHT, FULL - cada um para cenário específico. Entenda com exemplos visuais.

Conceitos Principais

INNER JOIN

Retorna rows que têm match nas duas tabelas. Interseção. Mais comum. SELECT * FROM orders INNER JOIN users ON orders.user_id = users.id.

LEFT JOIN

Todos da tabela esquerda + matches da direita. NULLs onde sem match. SELECT * FROM users LEFT JOIN orders ON users.id = orders.user_id.

RIGHT JOIN

Todos da tabela direita + matches da esquerda. Raramente usado (inverter LEFT é mais claro).

FULL OUTER JOIN

Todos de ambas tabelas. NULLs onde sem match. União. Raro em apps.

Passo a Passo

  1. Setup Tables: CREATE TABLE users (id SERIAL PRIMARY KEY, name VARCHAR); CREATE TABLE orders (id SERIAL PRIMARY KEY, user_id INT REFERENCES users(id), total DECIMAL);
  2. INNER JOIN: SELECT users.name, orders.total FROM users INNER JOIN orders ON users.id = orders.user_id. Apenas users com orders.
  3. LEFT JOIN: SELECT users.name, orders.total FROM users LEFT JOIN orders ON users.id = orders.user_id. Todos users, orders NULL se não tem.
  4. Multiple JOINs: SELECT users.name, orders.total, products.name FROM users JOIN orders ON users.id = orders.user_id JOIN order_items ON orders.id = order_items.order_id JOIN products ON order_items.product_id = products.id;
  5. Performance: Índices em foreign keys. EXPLAIN mostra join type (nested loop, hash join). Avoid Cartesian product (sem ON clause).

Boas Praticas

Recomendacoes

• Índices em join columns

• Especifique colunas ao invés de SELECT *

• Use aliases para claridade

• LEFT JOIN quando precisar de NULLs

• EXPLAIN para verificar performance

• Evite joins desnecessários

Erros Comuns

Evite estes erros

• JOIN sem ON clause (cartesian product)

• Sem índices em foreign keys

• SELECT * com múltiplos joins (muita data)

• RIGHT JOIN (confuso, use LEFT)

• Joins desnecessários

Checklist

  • Tabelas com foreign keys
  • INNER JOIN funcionando
  • LEFT JOIN testado
  • Índices em join columns
  • EXPLAIN executado
  • Queries otimizadas