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é.
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.
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.
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.
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ó.
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.
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.
El pedido 104 apunta a propósito al cliente 9, que no existe, para que los outer joins tengan algo que mostrar.
El LEFT JOIN conserva a Cleo con las columnas del pedido en NULL, y el filtro IS NULL deja solo esas filas.
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