0Pricing
SQL Academy · Lección

Uniones laterales (LATERAL JOIN)

Haga referencia al elemento anterior de FROM desde una subconsulta mediante LATERAL: el equivalente SQL de una llamada a función por fila.

Uniones laterales (LATERAL JOIN) es una lección gratuita de SQL Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de SQL Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de SQL Academy incluye 4 lecciones en total.

¿Qué es LATERAL?

LATERAL permite que una subconsulta de la cláusula FROM haga referencia a columnas de elementos anteriores de la lista FROM. Sin LATERAL, los elementos de FROM no pueden verse entre sí.

Modelo mental

LATERAL significa "para cada fila del lado izquierdo, evalúe esta consulta". Es como una subconsulta correlacionada, pero en la cláusula FROM y con capacidad para devolver varias filas y columnas.

Las 3 principales órdenes por usuario

El uso clásico 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 qué no una subconsulta en SELECT?

Una subconsulta escalar en SELECT devuelve un valor. LATERAL devuelve varias filas y varias columnas por cada fila externa.

LATERAL con funciones

Las funciones que devuelven conjuntos son similares a LATERAL de forma predeterminada:

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 frente a funciones de ventana

Para obtener los N primeros por grupo, tanto LATERAL como ROW_NUMBER funcionan. ROW_NUMBER suele ser más eficiente porque recorre la tabla una sola vez; LATERAL vuelve a consultar por cada fila 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 con agregaciones

Valores precalculados por fila:

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 requiere una cláusula ON para JOIN, pero la condición de unión está dentro de la subconsulta, por lo que el ON externo es true.

CROSS JOIN LATERAL frente a LEFT JOIN LATERAL

  • CROSS JOIN LATERAL: se descarta la fila externa si la consulta interna no devuelve filas
  • LEFT JOIN LATERAL ... ON true: se conserva la fila externa con columnas NULL

LATERAL para consultas de distancia

Para cada usuario, obtenga la tienda más cercana:

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 es parte del estándar SQL

Se estandarizó en SQL:1999. PostgreSQL lo implementa como LATERAL; SQL Server utiliza CROSS APPLY / OUTER APPLY.

Rendimiento

LATERAL se ejecuta una vez por cada fila externa. Con un índice adecuado en la tabla interna, cada iteración es rápida. Sin uno, puede ser lento a gran escala.

Resumen

LATERAL = "subconsulta de FROM que puede ver la fila externa".

  • Los N primeros por grupo
  • Pre cálculo por fila
  • Funciones que devuelven conjuntos
  • Combínelo con LEFT JOIN ... ON true para crear uniones externas

Comprobación rápida

¿Qué permite hacer LATERAL que no permite una subconsulta normal en FROM?

Preguntas frecuentes

¿La lección «Uniones laterales (LATERAL JOIN)» es gratis?

Sí — el texto completo de «Uniones laterales (LATERAL JOIN)» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de SQL Academy, actualiza a CoddyKit PRO. El curso de SQL Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Uniones laterales (LATERAL JOIN)»?

Haga referencia al elemento anterior de FROM desde una subconsulta mediante LATERAL: el equivalente SQL de una llamada a función por fila. Practicas SQL Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar SQL Academy?

No se requiere experiencia previa. SQL Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Uniones laterales (LATERAL JOIN)»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de SQL Academy?

Sí. Cada lección de SQL Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. CROSS JOIN y productos cartesianos
  2. Uniones laterales (LATERAL JOIN)
  3. Anti-uniones y semi-uniones (NOT EXISTS)
  4. Optimización del rendimiento de uniones entre varias tablas
← Volver a SQL Academy