Relaciones · coincidencias obligatorias

INNER JOIN

Combina dos tablas y conserva únicamente las parejas de filas que cumplen la condición de unión.

Lectura: 5–7 minEjemplo comprobadoPráctica con pistas
Contenido de esta guía

Qué conserva INNER JOIN

INNER JOIN compara filas de dos tablas y devuelve solo las combinaciones que hacen verdadera la condición de ON. Si una fila no encuentra pareja, desaparece del resultado.

Úsalo cuando la pregunta exige una relación existente: pedidos con su cliente, pagos asociados a un pedido o productos que aparecen en alguna línea de venta.

Sintaxis básica

Forma general
SELECT columnas
FROM tabla_a AS a
INNER JOIN tabla_b AS b
  ON b.clave = a.clave;

La palabra INNER suele ser opcional: escribir JOIN sin calificativo normalmente significa INNER JOIN. La condición debe relacionar columnas que representen el mismo dato, no solo columnas con nombres parecidos.

Ejemplo guiado

La tabla inicial tampoco se conserva completa. En un INNER JOIN, cualquier fila de cualquiera de los dos lados puede desaparecer si no cumple ON.

Los pedidos 101 y 104 tienen una fila en pagos. El pedido 103 no aparece porque no encuentra una coincidencia.

Resultado comprobado en SQLite
pedido_idestadometodo
101enviadotarjeta
104enviadotarjeta
Pedidos seleccionados que tienen pago
SELECT p.id AS pedido_id,
       p.estado,
       pa.metodo
FROM pedidos AS p
INNER JOIN pagos AS pa
  ON pa.pedido_id = p.id
WHERE p.id IN (101, 103, 104)
ORDER BY p.id;

Error frecuente

Unir columnas que no representan la misma clave

ON pedidos.id = clientes.id compara identificadores de entidades distintas. Puede devolver coincidencias accidentales y un resultado aparentemente válido.

Revisa las claves y relaciones del esquema. En este caso la relación correcta es pedidos.cliente_id = clientes.id.

Comprueba lo aprendido

Intermedia · tres tablas

Muestra solo pedidos que tienen pago

Devuelve el identificador del pedido, el nombre del cliente y el método de pago. Ordena por pedido. Los pedidos sin pago no deben aparecer.

Compatibilidad entre motores

INNER JOIN forma parte del SQL habitual y está disponible en PostgreSQL, MySQL, SQLite y SQL Server. JOIN sin INNER expresa la misma clase de unión en estos motores. Pueden cambiar los planes de ejecución, pero no la regla básica de conservar solo coincidencias.

Qué debes recordar

  • Solo aparecen filas que encuentran pareja.
  • ON define qué significa «coincidir».
  • Una relación uno a muchos puede repetir la fila de la tabla principal.
  • Si necesitas conservar ausencias, usa una unión externa.

Conceptos relacionados

Fuentes técnicas consultadas