Kodokon kodokon.com

INNER JOIN: conectar dos tablas

Cruza datos de dos tablas con INNER JOIN, alias legibles y una condición de unión precisa.

7 min · 3 preguntas

Abrir esta lección en Kodokon

Una base de datos real nunca almacena todo en una sola tabla: los clientes por un lado, sus pedidos por el otro. Para practicar este módulo, abre sqliteonline.com en tu navegador (sin necesidad de instalar nada) o inicia la herramienta sqlite3 en una terminal. Primero pega el script de abajo: crea las dos tablas que se usan en esta lección.

SQL
CREATE TABLE customers (
  id INTEGER PRIMARY KEY,
  name TEXT NOT NULL,
  city TEXT
);

CREATE TABLE orders (
  id INTEGER PRIMARY KEY,
  customer_id INTEGER NOT NULL,
  amount REAL NOT NULL,
  ordered_at TEXT NOT NULL
);

INSERT INTO customers (id, name, city) VALUES
  (1, 'Alice', 'Lyon'),
  (2, 'Karim', 'Paris'),
  (3, 'Mina', 'Nantes');

INSERT INTO orders
  (id, customer_id, amount, ordered_at)
VALUES
  (1, 1, 49.90, '2026-06-01'),
  (2, 1, 15.00, '2026-06-12'),
  (3, 2, 120.50, '2026-06-15');
Script inicial: ejecútalo antes de los ejemplos que siguen.

INNER JOIN ensambla dos tablas fila por fila según una condición de coincidencia escrita después de ON. Aquí, cada pedido se vincula al cliente cuyo id es igual a su customer_id. Las filas sin coincidencia se descartan del resultado: Mina, que no pidió nada, no aparece.

SQL
SELECT customers.name, orders.amount
FROM orders
INNER JOIN customers
  ON customers.id = orders.customer_id;
Cada pedido junto con el nombre de su cliente.

Repetir los nombres completos de las tablas se vuelve ilegible enseguida. Un alias declarado con AS renombra la tabla mientras dura la consulta. Prefija siempre las columnas ambiguas: id existe en ambas tablas, así que escribe c.id u o.id, nunca id a secas.

SQL
SELECT c.name, o.amount, o.ordered_at
FROM orders AS o
INNER JOIN customers AS c
  ON c.id = o.customer_id
WHERE o.amount > 20
ORDER BY o.amount DESC;
Alias cortos, un filtro y una ordenación: una consulta profesional típica.

Prueba de conocimientos

Comprueba que has retenido los puntos clave de esta lección.

  1. En una unión, ¿qué palabra clave introduce la condición de coincidencia entre las dos tablas?
    • WHERE
    • ON
    • HAVING
    • MATCH
  2. Con un INNER JOIN entre customers y orders, ¿qué le ocurre a un cliente que no tiene pedidos?
    • Aparece con columnas en NULL
    • Está ausente del resultado
    • La consulta falla
  3. ¿Por qué escribir c.id en lugar de id en una consulta que une customers y orders?
    • Para acelerar la ejecución de la consulta
    • Porque id existe en ambas tablas y sería ambiguo
    • Porque SQLite lo exige para cada columna