Joins en SQL explicados con ejemplos en vivo

Joins en SQL explicados

Joins en SQL explicados: inner, left, right, full, cross, self | We.Inc

Ejecuta cada join de SQL sobre dos pequeñas tablas de ejemplo directamente en tu navegador y mira qué filas sobreviven, con sintaxis PostgreSQL para INNER, LEFT, RIGHT, FULL, CROSS y self joins.

Un join combina filas de dos tablas mediante una condición, normalmente claves que coinciden. INNER JOIN conserva solo las filas que coinciden en ambos lados. LEFT JOIN conserva todas las filas de la tabla izquierda y rellena con NULL las columnas de la derecha que faltan, RIGHT JOIN hace lo contrario, FULL JOIN conserva ambas y CROSS JOIN empareja cada fila con todas las demás.

Qué filas conserva cada join

Los diagramas de Venn son la forma habitual de enseñar los joins, pero ocultan lo que de verdad da problemas: las filas duplicadas y los NULL. Abajo hay dos tablas diminutas, customers y orders, con un cliente que nunca hizo un pedido y un pedido cuyo cliente fue eliminado. Elige un join y el resultado se calcula en tu navegador, para que veas exactamente qué filas aparecen y por qué.

Preguntas frecuentes

¿Qué diferencia hay entre INNER JOIN y LEFT JOIN?

INNER JOIN descarta las filas que no tienen coincidencia. LEFT JOIN conserva todas las filas de la primera tabla y pone NULL en las columnas de la segunda cuando no hay coincidencia. En la demo, Cleo aparece en el LEFT JOIN con un pedido vacío y no aparece en el INNER JOIN.

¿JOIN es lo mismo que INNER JOIN?

Sí. En PostgreSQL la palabra INNER es opcional y un JOIN a secas es un inner join. La palabra OUTER también es opcional, así que LEFT JOIN y LEFT OUTER JOIN significan lo mismo.

¿Por qué mi join devolvió más filas de las que tiene la tabla?

Cada fila izquierda aparece una vez por cada fila derecha que coincide. Un cliente con tres pedidos aparece tres veces. Es el comportamiento correcto; agrega con GROUP BY o haz el join con una subconsulta ya agrupada si necesitas una fila por cliente.

¿Qué es un self join?

Una tabla unida consigo misma bajo dos alias, que se usa cuando las filas apuntan a otras filas de la misma tabla, como los empleados y sus responsables o los clientes y quién los recomendó.

¿MySQL admite FULL OUTER JOIN?

PostgreSQL sí, y esa es la sintaxis que se muestra aquí. MySQL no tiene la palabra clave FULL JOIN; la solución habitual es combinar un LEFT JOIN y un RIGHT JOIN con UNION.

ON, USING y NATURAL

Los filtros de los outer joins se aplican en otro orden

Pruébalo en PostgreSQL

Pega esto en psql o en cualquier editor SQL de Postgres para recrear las tablas de ejemplo, y luego ejecuta las consultas de la demo.

Tablas de ejemplo

El pedido 104 apunta a propósito al cliente 9, que no existe, para que los outer joins tengan algo que mostrar.

Clientes que nunca hicieron un pedido

El LEFT JOIN conserva a Cleo con las columnas del pedido en NULL, y el filtro IS NULL deja solo esas filas.

Playground de joins

Tablas de ejemplo usadas en la demo

Tipo de join

Resultado: {n} filas

Las celdas resaltadas las rellenó con NULL el outer join.

SELF

Empieza gratis · Sin tarjeta de crédito

Relacionado: Guías

Producto

Para quién es

Funciones

Recursos

Empresa

Mapa del sitio