Contenido de esta guía
Qué hace un JOIN
Una consulta con JOIN toma filas de dos tablas —o dos apariciones de la misma tabla— y forma filas de resultado cuando se cumple la condición de unión.
Al escribir simplemente JOIN se utiliza normalmente una unión interna: solo aparecen las parejas que cumplen la condición. Otros tipos conservan filas sin pareja o generan todas las combinaciones.
La condición ON
SELECT columnas
FROM tabla_izquierda AS i
JOIN tabla_derecha AS d
ON d.clave = i.clave_foranea;ON define qué filas se emparejan. Los alias hacen visible de qué tabla procede cada columna y evitan ambigüedades como dos columnas llamadas id.
Ejemplo guiado: pedidos con su cliente
SELECT p.id AS pedido,
c.nombre AS cliente,
p.total
FROM pedidos AS p
JOIN clientes AS c
ON c.id = p.cliente_id
ORDER BY p.id
LIMIT 6;| pedido | cliente | total |
|---|---|---|
| 101 | Ana Torres | 128.4 |
| 102 | Luis Martín | 49.5 |
| 103 | Ana Torres | 24.9 |
| 104 | Marta Ruiz | 179 |
| 105 | Diego López | 69.9 |
| 106 | Sara Gómez | 1088 |
Cada pedido contiene cliente_id. La condición lo compara con la clave primaria de clientes para recuperar el nombre correspondiente.
Por qué una fila puede aparecer varias veces
Un cliente puede tener varios pedidos. Por eso Ana aparece en más de una fila: no es un duplicado accidental, sino el resultado correcto de una relación uno a muchos.
Antes de corregir “duplicados”, identifica la cardinalidad. Si una fila de la izquierda tiene tres parejas válidas en la derecha, el resultado necesita tres filas. Usar DISTINCT sin entender la causa puede ocultar un error de unión.
Error frecuente
Unir columnas que comparten nombre, pero no significado
ON clientes.id = pedidos.idAmbas columnas son identificadores, pero representan entidades distintas. La relación correcta es clientes.id = pedidos.cliente_id. Revisa claves y modelo de datos antes de escribir ON.
Elige el tipo según la pregunta
INNER JOIN: solo parejas coincidentes.LEFT JOIN: conserva todas las filas de la izquierda.CROSS JOIN: genera todas las combinaciones.- Autounión: relaciona una tabla consigo misma mediante alias distintos.
Comprueba lo aprendido
Muestra pagos con el estado del pedido
Devuelve pagos.id como pago, pagos.importe y pedidos.estado. Relaciona ambas tablas mediante el pedido y ordena por el identificador del pago.
pagos AS pa.pedidos AS pe.pe.id con pa.pedido_id.Solución razonada
SELECT pa.id AS pago,
pa.importe,
pe.estado
FROM pagos AS pa
JOIN pedidos AS pe
ON pe.id = pa.pedido_id
ORDER BY pa.id;La clave foránea pagos.pedido_id señala el pedido al que pertenece cada pago.
Compatibilidad entre motores
Las uniones internas y externas habituales están ampliamente soportadas. Sí cambian detalles como ciertos operadores de unión, USING, NATURAL JOIN y el soporte histórico de RIGHT o FULL OUTER JOIN según motor y versión. Para material inicial, una condición ON explícita suele ser la opción más clara.
Qué debes recordar
JOINempareja filas según una condición.- La condición debe comparar columnas con el mismo significado.
- Varias filas pueden ser correctas en relaciones uno a muchos.
- El tipo de unión depende de qué filas sin pareja necesitas conservar.