0Pricing
SQL Academy · Aula

Junções laterais (LATERAL JOIN)

Faça referência ao item anterior de FROM de dentro de uma subconsulta com LATERAL — o equivalente SQL a uma chamada de função por linha.

Junções laterais (LATERAL JOIN) é uma aula grátis de SQL Academy no CoddyKit. Esta é a aula 2 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 Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de SQL Academy inclui 4 aulas no total.

O que é LATERAL?

LATERAL permite que uma subconsulta na cláusula FROM referencie colunas de itens que aparecem antes na lista FROM. Sem LATERAL, os itens de FROM não podem enxergar uns aos outros.

Modelo mental

LATERAL significa "para cada linha do lado esquerdo, avalie esta consulta". É como uma subconsulta correlacionada — mas na cláusula FROM e retornando várias linhas e colunas.

As 3 principais orders por usuário

O uso clássico de LATERAL:

SELECT u.id, u.email, o.id AS order_id, o.total
FROM users u
JOIN LATERAL (
  SELECT id, total FROM orders
  WHERE user_id = u.id
  ORDER BY total DESC
  LIMIT 3
) AS o ON true;

Por que não usar uma subconsulta em SELECT?

Uma subconsulta escalar em SELECT retorna um valor. LATERAL retorna várias linhas e várias colunas para cada linha externa.

LATERAL com funções

Funções que retornam conjuntos já funcionam por padrão de forma semelhante a LATERAL:

SELECT t.id, unnest_tag
FROM posts t
CROSS JOIN LATERAL unnest(t.tags) AS unnest_tag;

-- Equivalent (set-returning functions are implicit LATERAL):
SELECT t.id, unnest_tag
FROM posts t, unnest(t.tags) AS unnest_tag;

LATERAL vs funções de janela

Para obter os "N primeiros por grupo", tanto LATERAL quanto ROW_NUMBER funcionam. ROW_NUMBER costuma ser mais eficiente porque percorre a tabela uma vez; LATERAL faz uma nova consulta para cada linha externa.

-- ROW_NUMBER alternative:
WITH ranked AS (
  SELECT *, ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY total DESC) AS rn
  FROM orders
)
SELECT u.email, r.id, r.total
FROM users u
JOIN ranked r ON r.user_id = u.id
WHERE r.rn <= 3;

LATERAL com agregações

Valores pré-calculados por linha:

SELECT u.email, stats.last_order_at, stats.total_orders
FROM users u
LEFT JOIN LATERAL (
  SELECT MAX(created_at) AS last_order_at,
         COUNT(*)        AS total_orders
  FROM orders WHERE user_id = u.id
) AS stats ON true;

ON true

LATERAL exige uma cláusula ON para JOIN — mas a condição de JOIN fica dentro da subconsulta, portanto o ON externo é true.

CROSS JOIN LATERAL vs LEFT JOIN LATERAL

  • CROSS JOIN LATERAL — a linha externa é descartada se a consulta interna não retornar linhas
  • LEFT JOIN LATERAL ... ON true — a linha externa é mantida com colunas NULL

LATERAL para consultas de distância

Para cada usuário, encontre a loja mais próxima:

SELECT u.id, s.name, s.distance
FROM users u
CROSS JOIN LATERAL (
  SELECT name, location <-> u.location AS distance
  FROM stores
  ORDER BY location <-> u.location
  LIMIT 1
) AS s;

LATERAL é padrão SQL

Padronizado no SQL:1999. O PostgreSQL o implementa como LATERAL; o SQL Server usa CROSS APPLY / OUTER APPLY.

Desempenho

LATERAL executa uma vez para cada linha externa. Com um índice adequado na tabela interna, cada iteração é rápida. Sem um índice, pode ficar lento em grande escala.

Recapitulação

LATERAL = "subconsulta em FROM que enxerga a linha externa".

  • N primeiros por grupo
  • Pré-cálculo por linha
  • Funções que retornam conjuntos
  • Combine com LEFT JOIN ... ON true para junções externas

Verificação rápida

O que LATERAL permite fazer que uma subconsulta normal em FROM não permite?

Perguntas Frequentes

A aula “Junções laterais (LATERAL JOIN)” é grátis?

Sim — o texto completo de “Junções laterais (LATERAL JOIN)” é 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 Academy, atualize para CoddyKit PRO. O curso de SQL Academy inclui 4 aulas no total.

O que vou aprender em “Junções laterais (LATERAL JOIN)”?

Faça referência ao item anterior de FROM de dentro de uma subconsulta com LATERAL — o equivalente SQL a uma chamada de função por linha. Você pratica SQL Academy 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 Academy?

Nenhuma experiência prévia é necessária. SQL Academy 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 2 de 4.

Quanto tempo leva a aula “Junções laterais (LATERAL JOIN)”?

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 Academy?

Sim. Cada aula de SQL Academy 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. Junções cruzadas e produtos cartesianos
  2. Junções laterais (LATERAL JOIN)
  3. Antijunções e semijunções (NOT EXISTS)
  4. Ajuste de desempenho de junções entre várias tabelas
← Voltar para SQL Academy