INNER JOIN EL MÁS COMÚN
Devuelve solo las filas que tienen valores coincidentes en ambas tablas. Es el tipo de JOIN predeterminado y el más usado.
SELECT orders.id, customers.name, orders.amount
FROM orders
INNER JOIN customers
ON orders.customer_id = customers.id
Puntos clave:
- Solo devuelve registros coincidentes de ambas tablas
- Filtra automáticamente las filas sin coincidencia
- El JOIN más eficiente en rendimiento
- Se puede escribir solo como
JOIN (INNER va implícito)
📚 Aprende más: SQL JOINs para principiantes, Guía de joins en MySQL, Guía de joins en SQL Server
LEFT JOIN
Devuelve todas las filas de la tabla izquierda y las filas coincidentes de la tabla derecha. Si no hay coincidencia, se devuelven valores NULL en las columnas de la tabla derecha.
SELECT customers.name, orders.amount
FROM customers
LEFT JOIN orders
ON customers.id = orders.customer_id
Puntos clave:
- Conserva todos los registros de la tabla izquierda (la primera)
- Aparecen valores NULL en las columnas de la tabla derecha sin coincidencia
- También se conoce como LEFT OUTER JOIN
- Útil para encontrar registros sin datos relacionados
📚 Aprende más: SQL JOINs para principiantes, Guía de joins en MySQL, Guía de joins en SQL Server
RIGHT JOIN
Devuelve todas las filas de la tabla derecha y las filas coincidentes de la tabla izquierda. Es lo opuesto a LEFT JOIN.
SELECT orders.amount, customers.name
FROM orders
RIGHT JOIN customers
ON orders.customer_id = customers.id
Puntos clave:
- Conserva todos los registros de la tabla derecha (la segunda)
- Aparecen valores NULL en las columnas de la tabla izquierda sin coincidencia
- También se conoce como RIGHT OUTER JOIN
- Siempre se puede reescribir como LEFT JOIN
📚 Aprende más: SQL JOINs para principiantes, Guía de joins en MySQL, Guía de joins en SQL Server
FULL OUTER JOIN
Devuelve todas las filas de ambas tablas, con valores NULL donde no hay coincidencias en ninguna dirección.
SELECT customers.name, orders.amount
FROM customers
FULL OUTER JOIN orders
ON customers.id = orders.customer_id
Puntos clave:
- Combina los resultados de LEFT y RIGHT JOIN
- Muestra todos los registros de ambas tablas
- No es compatible con MySQL (usa UNION en su lugar)
- Útil para encontrar todas las relaciones y huecos
📚 Aprende más: SQL JOINs para principiantes, Full Outer Join en MySQL, Guía de joins en SQL Server
CROSS JOIN ÚSALO CON CUIDADO
Devuelve el producto cartesiano de ambas tablas: cada fila de la primera tabla combinada con cada fila de la segunda.
SELECT sizes.name, colors.name
FROM sizes
CROSS JOIN colors
SELECT sizes.name, colors.name
FROM sizes, colors
Puntos clave:
- No necesita cláusula ON (sin condición de join)
- Filas del resultado = (filas de la tabla izquierda × filas de la tabla derecha)
- Puede generar rápidamente conjuntos de resultados enormes
- Útil para generar combinaciones o datos de prueba
📚 Aprende más: SQL JOINs para principiantes, Cross Join en PostgreSQL
LEFT ANTI JOIN
Devuelve las filas de la tabla izquierda que no tienen coincidencias en la tabla derecha. Útil para encontrar registros sin relaciones.
SELECT customers.name
FROM customers
LEFT JOIN orders
ON customers.id = orders.customer_id
WHERE orders.id IS NULL
SELECT customers.name
FROM customers
WHERE NOT EXISTS (
SELECT 1 FROM orders
WHERE orders.customer_id = customers.id
)
Puntos clave:
- Se implementa con LEFT JOIN + WHERE IS NULL
- Encuentra registros sin datos relacionados
- También se llama "LEFT EXCLUDING JOIN"
- Ejemplo: clientes que nunca hicieron un pedido
RIGHT ANTI JOIN
Devuelve las filas de la tabla derecha que no tienen coincidencias en la tabla izquierda. Es lo opuesto a LEFT ANTI JOIN.
SELECT orders.id
FROM customers
RIGHT JOIN orders
ON customers.id = orders.customer_id
WHERE customers.id IS NULL
SELECT orders.id
FROM orders
LEFT JOIN customers
ON orders.customer_id = customers.id
WHERE customers.id IS NULL
Puntos clave:
- Se implementa con RIGHT JOIN + WHERE IS NULL
- Encuentra registros huérfanos en la tabla derecha
- Siempre se puede reescribir como LEFT ANTI JOIN
- Ejemplo: pedidos sin un cliente válido