Skip to content

Joins de SQL explicados

Tipos de JOIN de SQL comparados: inner, outer, cross, self, lateral, natural — qué devuelve cada uno y un ejemplo de una línea.

Los joins combinan filas de dos tablas mediante una clave compartida. El tipo de join decide qué filas sobreviven cuando las claves coinciden, faltan o se repiten.

Tabla de referencia · 8 entradas
8 of 8 rows
Internos y externos
Solo las filas en las que la condición ON se cumple en ambas tablas. Las filas sin coincidencia en cualquiera de los lados se descartan.SELECT u.name, o.total FROM users u INNER JOIN orders o ON u.id = o.user_id;
Todas las filas de la tabla izquierda. Las columnas de la derecha son NULL donde no hay coincidencia.SELECT u.name, o.total FROM users u LEFT OUTER JOIN orders o ON u.id = o.user_id;
Todas las filas de la tabla derecha. Las columnas de la izquierda son NULL donde no hay coincidencia.SELECT u.name, o.total FROM users u RIGHT OUTER JOIN orders o ON u.id = o.user_id;
Todas las filas de ambas tablas. Los lados sin coincidencia se rellenan con NULL.SELECT u.name, o.total FROM users u FULL OUTER JOIN orders o ON u.id = o.user_id;
Cruzado y self
Producto cartesiano. Cada fila izquierda se empareja con cada fila derecha. Sin cláusula ON.SELECT u.name, o.total FROM users u CROSS JOIN orders o;
Una tabla unida consigo misma mediante alias. Compara filas dentro de una misma tabla.SELECT a.id AS o1, b.id AS o2 FROM orders a JOIN orders b ON a.user_id = b.user_id WHERE a.id < b.id;
Avanzado
Una subconsulta en FROM evaluada por cada fila externa. La subconsulta puede referenciar columnas de la tabla externa.SELECT u.name, o.total FROM users u, LATERAL (SELECT total FROM orders WHERE user_id = u.id LIMIT 1) o;
Une por columnas que comparten nombre. Sin cláusula ON. Cuidado con colisiones de claves no deseadas.SELECT u.name, o.total FROM users u NATURAL JOIN orders o;