...

INNER JOIN en SQL: la clave para unir datos de varias tablas

En el mundo de las bases de datos, rara vez la información se encuentra en una sola tabla. Generalmente, los datos están organizados en tablas relacionadas. Para analizar esta información de manera eficiente, necesitas aprender a combinar tablas.
Una de las formas más comunes de hacerlo es mediante la cláusula INNER JOIN.

En este artículo aprenderás:

  • Qué es un INNER JOIN y para qué se utiliza.
  • Sintaxis básica y ejemplos prácticos.
  • Diferencias entre motores de base de datos como SQL Server, MySQL, PostgreSQL y SQLite.
  • Buenas prácticas al usar INNER JOIN.
  • Cómo practicar directamente en db-fiddle.com con datos ficticios.

¿Qué es INNER JOIN en SQL?

Un INNER JOIN es una instrucción de SQL que combina registros de dos tablas diferentes.
El resultado incluirá solo las filas donde exista coincidencia en ambas tablas según la condición establecida.

Piensa en el INNER JOIN como una intersección:

  • Si un registro existe en la tabla A y tiene una relación válida en la tabla B, aparecerá en el resultado.
  • Si no existe coincidencia, ese registro no será mostrado.

Esto es fundamental cuando necesitas analizar información que está relacionada, por ejemplo:

  • Empleados y los departamentos donde trabajan.
  • Pedidos y los clientes que los realizaron.
  • Productos y sus categorías.

Sintaxis básica de INNER JOIN

La sintaxis general es:

SELECT columnas
FROM tabla1
INNER JOIN tabla2
    ON tabla1.columna_relacionada = tabla2.columna_relacionada;

Explicación:

  • tabla1 y tabla2: son las tablas que deseas unir.
  • ON: define la condición que determina cómo se relacionan los registros.
  • columna_relacionada: es la clave usada para hacer la relación (generalmente una clave primaria y una clave foránea).

Ejemplo práctico: empleados y departamentos

Imaginemos que tenemos dos tablas:

  • empleados: contiene información de cada empleado.
  • departamentos: contiene la lista de departamentos.

Queremos obtener el nombre del empleado junto con el nombre de su departamento.

Estructura de tablas

Puedes crear estas tablas y poblarlas con datos ficticios en db-fiddle.com:

-- Tabla de departamentos
CREATE TABLE departamentos (
    departamento_id INTEGER PRIMARY KEY,
    nombre_departamento VARCHAR(50) NOT NULL
);

-- Tabla de empleados
CREATE TABLE empleados (
    empleado_id INTEGER PRIMARY KEY,
    nombre VARCHAR(50) NOT NULL,
    salario DECIMAL(10,2) NOT NULL,
    departamento_id INTEGER,
    FOREIGN KEY (departamento_id) REFERENCES departamentos(departamento_id)
);

-- Insertar datos en departamentos
INSERT INTO departamentos (departamento_id, nombre_departamento) VALUES
(1, 'Recursos Humanos'),
(2, 'Ventas'),
(3, 'Tecnología'),
(4, 'Finanzas');

-- Insertar datos en empleados
INSERT INTO empleados (empleado_id, nombre, salario, departamento_id) VALUES
(1, 'Ana López', 50000, 1),
(2, 'Carlos Pérez', 60000, 2),
(3, 'Laura Martínez', 55000, 2),
(4, 'Miguel Torres', 70000, 3),
(5, 'Sofía Gómez', 48000, NULL); -- empleado sin departamento asignado

Consulta con INNER JOIN

SELECT e.nombre AS empleado,
       d.nombre_departamento
FROM empleados AS e
INNER JOIN departamentos AS d
    ON e.departamento_id = d.departamento_id;

Resultado esperado:

empleadonombre_departamento
Ana LópezRecursos Humanos
Carlos PérezVentas
Laura MartínezVentas
Miguel TorresTecnología

Sofía Gómez no aparece en el resultado porque no tiene asignado un departamento (departamento_id es NULL).


Diferencias entre motores de base de datos

Aunque la sintaxis de INNER JOIN es estándar en SQL, algunos motores tienen diferencias sutiles:

Motor de base de datosParticularidad
SQL ServerSoporta INNER JOIN estándar y la sintaxis antigua con coma, aunque la recomendación es usar JOIN.
MySQL / PostgreSQL / SQLiteSintaxis idéntica a la estándar.
MySQLTiene opciones adicionales como STRAIGHT_JOIN para optimización específica.

⚠️ Recomendación: Siempre utiliza la sintaxis moderna (INNER JOIN ... ON) porque es más clara y funciona en todos los motores.


Buenas prácticas al usar INNER JOIN

  1. Usa alias en tablas:
    Esto mejora la legibilidad y hace más claras las consultas.
SELECT e.nombre, d.nombre_departamento
FROM empleados AS e
INNER JOIN departamentos AS d
    ON e.departamento_id = d.departamento_id;
  1. Selecciona solo las columnas necesarias:
    Evita SELECT * para mejorar el rendimiento y la claridad.
-- Menos recomendable
SELECT * FROM empleados e INNER JOIN departamentos d ON e.departamento_id = d.departamento_id;

-- Mejor práctica
SELECT e.nombre, e.salario, d.nombre_departamento
FROM empleados AS e
INNER JOIN departamentos AS d
    ON e.departamento_id = d.departamento_id;
  1. Verifica la existencia de claves foráneas:
    Asegúrate de que las columnas usadas para la relación estén correctamente indexadas.
  2. Considera el rendimiento con grandes volúmenes de datos:
    • Crea índices en las columnas usadas en el JOIN.
    • Evita condiciones complejas dentro del ON cuando no sean necesarias.

INNER JOIN vs otros tipos de JOIN

Tipo de JOINQué muestra
INNER JOINSolo filas con coincidencia en ambas tablas.
LEFT JOINTodas las filas de la tabla izquierda, incluso si no hay coincidencia.
RIGHT JOINTodas las filas de la tabla derecha, incluso si no hay coincidencia.
FULL OUTER JOINTodas las filas de ambas tablas (SQL Server y PostgreSQL).

Practica en línea con db-fiddle.com

Puedes probar todos estos ejemplos directamente en db-fiddle.com:

  1. Copia y pega el código de creación de tablas y datos.
  2. Ejecuta las consultas de ejemplo.
  3. Modifica condiciones o agrega nuevos datos para reforzar tu aprendizaje.

Esta herramienta es gratuita y no requiere instalación, ideal para practicar desde cualquier lugar.


Conclusión

  • INNER JOIN te permite combinar información de dos tablas mostrando solo los registros con coincidencia.
  • Es esencial para trabajar con bases de datos normalizadas.
  • Aunque existen ligeras diferencias entre motores, la sintaxis estándar funciona en todos ellos.
  • Buenas prácticas como el uso de alias, seleccionar columnas específicas y crear índices pueden mejorar el rendimiento de tus consultas.
  • Practicar en db-fiddle.com es una excelente forma de afianzar tus conocimientos.

Deja un comentario

Seraphinite AcceleratorOptimized by Seraphinite Accelerator
Turns on site high speed to be attractive for people and search engines.