This website uses cookies

Our website, platform and/or any sub domains use cookies to understand how you use our services, and to improve both your experience and our marketing relevance.

Cómo unir dos tablas en MySQL [Guía fácil con ejemplos]

Updated on julio 10, 2025

11 Min Read

Puntos clave:

  • Las uniones MySQL combinan datos de varias tablas en un único resultado.
  • Los distintos tipos de unión (INNER, LEFT, RIGHT, etc.) determinan qué filas se incluyen en función de las condiciones coincidentes.
  • Las uniones son esenciales para recuperar datos relacionados de forma eficaz en las aplicaciones de bases de datos.

Al gestionar datos en bases de datos, organizar la información en tablas separadas puede mejorar el rendimiento y mantener la coherencia. Sin embargo, para realizar determinadas consultas, a menudo es necesario combinar datos de varias tablas. La unión de tablas lo consigue haciendo coincidir registros basándose en valores de campos compartidos.

Por ejemplo, unir una tabla«clientes» con una tabla«pedidos» permite recuperar los pedidos y la información de los clientes correspondientes en una sola consulta.

Los distintos tipos de uniones proporcionan varios métodos para combinar los datos de una tabla. En esta guía, aprenderemos a unir dos tablas en MySQL, por qué se utilizan y cómo utilizarlas.

Empecemos.

Aloja sitios web PHP con facilidad [A partir de 11 $ de crédito].

  • Puesta en escena gratuita
  • Copia de seguridad gratuita
  • PHP 8.0
  • Sitios web ilimitados

PRUEBA AHORA

¿Qué son las uniones en MySQL?

En resumen, las Uniones MySQL te permiten acceder a datos de varias tablas. Una Unión MySQL se realiza siempre que se unen dos o más tablas en una sentencia SQL.

El formato básico de una sentencia SQL join es el siguiente:

SELECT
*
FROM
<first_table>
<join_type>
<second_table>
<join_condition>;

Las uniones de bases de datos fusionan registros de distintas fuentes basándose en valores coincidentes en columnas específicas. Cada fila resultante incluye datos de la primera tabla y datos de la segunda tabla, alineados en función de valores de columna compartidos.

En una unión, cada fila incluye todas las columnas de la primera tabla, seguidas de todas las columnas de la segunda tabla. Puedes especificar qué columnas mostrar en la parte SELECT de la consulta.

Las uniones MySQL incluyen:

  • Unión interna MySQL (también conocida como Unión simple)
  • Unión exterior izquierda MySQL (también llamada Unión izquierda, devuelve los registros coincidentes de la tabla izquierda)
  • Unión derecha (devuelve los registros coincidentes de la tabla derecha)
  • Unión completa (devuelve registros coincidentes de todas las tablas)

El tipo de unión y las condiciones especificadas determinan cómo se construye cada fila resultante y qué ocurre con las filas de cada tabla que no cumplen la condición de unión.

Por ejemplo, se puede utilizar un Inner Join para combinar una tabla«clientes» con una tabla«pedidos«, recuperando los pedidos junto con la información correspondiente de los clientes.

¿Cómo unir varias tablas en MySQL?

Si trabajas en una aplicación grande, como una tienda de comercio electrónico, y creas varias tablas en ella, como clientes, pedidos y productos, puede que necesites unir tablas.

Veamos un ejemplo en el que obtendremos todos los productos pedidos por clientes concretos.

Vamos a crear nuestra consulta:

SELECT * FROM table1
LEFT JOIN table2 ON table2.id = table1.id
LEFT JOIN table3 ON table3.id = table1.id

Si te fijas en la consulta anterior, primero unimos la Tabla 1 y la Tabla 2, lo que da lugar a una tabla temporal con datos combinados de la Tabla 1 y la Tabla 2, que luego se une a la Tabla 3. Esta ecuación puede ampliarse a más de 3 tablas hasta N tablas. Tienes que asegurarte de que la consulta SQL tiene una sentencia join N-1 para poder unir N tablas.

La consulta anterior te permitirá unir las filas de la Tabla 1 (en cualquier caso) con las filas de las otras dos tablas. Utilizar LEFT JOIN te permite unir la Tabla 2 y la Tabla 3 con la Tabla 1 (no sólo la Tabla 2 con la Tabla 1 y la Tabla 3 con la Tabla 2).

También puedes añadir condiciones como WHERE, AND y ORDER BY:

SELECT * FROM table1
LEFT JOIN table2 ON table2.id = table1.id
LEFT JOIN table3 ON table3.id = table1.id
WHERE month = 'numberHere'
AND (table2.email IS NOT NULL OR table3.email IS NOT NULL)
ORDER BY submitdate DESC

¿Cuántas tablas se pueden unir en MySQL?

Según la documentación oficial de MySQL 8.0, el número máximo de tablas en una sentencia JOIN es 61. Sin embargo, ten en cuenta que las sentencias JOIN podrían requerir muchos recursos del servidor a medida que aumenta el número de tablas. Si éste es el caso de tu consulta, te recomiendo que la dividas en varias consultas para reducir la carga del servidor.

Tipos de uniones en MySQL

Hay distintos tipos de uniones, y cada una puede producir conjuntos de datos diferentes. Saber cómo funcionan puede ayudarte a seleccionar la unión más adecuada para conseguir el resultado de datos deseado para tu consulta.

  • Unión interna
  • Junta derecha
  • Unión izquierda
  • Unión
  • Unión cruzada o producto cartesiano
  • Unirse uno mismo
  • Unión exterior completa
  • Unión Natural

¿Las uniones SQL te hacen girar la cabeza?

Simplifica las consultas complejas con los consejos de los asistentes de bases de datos de la Comunidad Reddit de Cloudways.

Para demostrar el comportamiento de cada tipo de unión, consideremos un escenario en el que tenemos dos tablas: misinvitados y mensajes.

Esquema de la Tabla «mensajes

Crearemos una tabla llamada«mensajes» para almacenar los mensajes junto con el ID de usuario del remitente. Éste es el esquema de nuestra tabla:

CREATE TABLE `messages` (
`id` int(11) NOT NULL,
`message` varchar(255) NOT NULL
);

Esta tabla nos servirá de referencia para probar cada tipo de unión.

Unión interna

En MySQL, el tipo de unión por defecto es una unión interna. Se puede especificar utilizando INNER JOIN o simplemente JOIN. Además, MySQL admite CROSS JOIN. A diferencia de otros sistemas de bases de datos, en los que INNER JOIN y CROSS JOIN son conceptos separados, MySQL los combina en una única construcción.

La estructura de las consultas Inner Join son:

SELECT column_name(s)

FROM table1

INNER JOIN table2

ON table1.column_name=table2.column_name;

Inner Join y simple Join son lo mismo. También puedes escribir tu consulta así:

SELECT column_name(s)

FROM table1

JOIN table2

ON table1.column_name=table2.column_name;

Ahora vamos a obtener el Nombre y el mensaje de nuestra base de datos utilizando Inner join. La consulta será algo parecido a esto

$sql = "SELECT CONCAT(myguests.firstname,' ',myguests.lastname) AS name, myguests.email, messages.message 
From myguests 
INNER JOIN messages 
ON myguests.id = messages.id";

La función CONCAT se utiliza para unir dos columnas de cadena en MySQL. Ahora abre tu index.php, que hemos creado anteriormente, y copia en él el siguiente código.

<table>

    <tr>

        <td> &nbsp;&nbsp;Name</td>

        <td> &nbsp;&nbsp;Email</td>

        <td> &nbsp;&nbsp;Message</td>

        <!-- <td> &nbsp;&nbsp;Message</td>

        <td> &nbsp;&nbsp;Date</td>!-->

    </tr>

<?php

include 'crud.php';

$sql = "SELECT CONCAT(myguests.firstname,' ',myguests.lastname) AS name, myguests.email, messages.message 
        From myguests 
        INNER JOIN messages 
        ON myguests.id = messages.id";

$result = selectdata($sql);

    if($result != "zero")

    {

        while($row = $result->fetch_assoc())

        {

            echo "<tr>";

            echo "<td>" . $row['name'] . "</td>";

            echo "<td>" . $row['email'] . "</td>";

            if($row['message'] === null){echo "<td>" . &nbsp;'null'. "</td>";} else { echo "<td>" . &nbsp;$row['message']. "</td>"; } ;

            echo "</tr>";

        }

    }

    else

        {

            echo $result;

    }

?>

</table>

?>

Cuando ejecutes esta página en tu servidor de alojamiento web PHP, el resultado tendrá este aspecto:

imagen2

Como puedes ver claramente, sólo ha devuelto los resultados que coinciden con user_id y en los que los mensajes no son nulos.

La JOIN DERECHA combina tablas para devolver todos los valores de la tabla derecha y los valores coincidentes de la tabla izquierda. También incluye los valores NULL de la tabla izquierda cuando no se encuentra ninguna coincidencia.

La estructura del RIGHT JOIN es

SELECT column_name(s)

FROM table1

RIGHT JOIN table2

ON table1.column_name=table2.column_name;

Supongamos que queremos obtener el Nombre y el mensaje de nuestra base de datos, con mensajes como tabla derecha y misinvitados como tabla izquierda. La consulta sería

$sql = "SELECT CONCAT(myguests.firstname,' ',myguests.lastname) AS name, myguests.email, messages.message 
From myguests 
RIGHT JOIN messages 
ON messages.id = myguests.id";

Esta consulta devuelve todos los mensajes de la tabla messages. Para cada mensaje, también obtiene los nombres y correos electrónicos correspondientes de la tabla myguests, si están disponibles. Si no hay IDs coincidentes en la tabla myguests, se devuelven valores NULL para los nombres y correos electrónicos.

Ahora abre index.php y sustituye la consulta $sql por la anterior. Cuando la ejecutes, tu resultado será

imagen3

Si echas un vistazo a la tabla de mensajes de la captura de pantalla anterior, verás que algunos ID no coinciden con ningún ID de usuario. Por eso esta consulta devuelve nulos en las columnas nombre y correo electrónico cuando no encuentra ninguna coincidencia en la columna izquierda.

LEFT JOIN

Las JOIN IZQUIERDAS unen las dos tablas de forma que devuelven todos los valores de la tabla izquierda y los valores coincidentes de la tabla derecha, y también devuelven NULL en la tabla derecha cuando no se encuentra ninguna coincidencia. La estructura de una JOIN IZQUIERDA es:

SELECT column_name(s)

FROM table1

LEFT JOIN table2

ON table1.column_name=table2.column_name;

Ahora vamos a recuperar el Nombre y el mensaje de nuestra base de datos, con la tabla «mensajes» como tabla derecha y «misinvitados» como tabla izquierda.

$sql = "SELECT CONCAT(myguests.firstname,' ',myguests.lastname) AS name, myguests.email, messages.message
From myguests
LEFT JOIN messages
ON messages.id = myguests.id";

Ahora abre index.php y sustituye la consulta $sql por la anterior. Cuando la ejecutes, tu resultado será

imagen4

Si miras la tabla de mensajes, encontrarás algunos ID que no coinciden con ningún ID de usuario. Por eso esta consulta devuelve NULL en la columna Mensaje, y no encuentra ninguna coincidencia en la columna derecha.

UNIÓN

UNION en MySQL combina varias columnas de diferentes tablas en un único conjunto de resultados. La estructura de una consulta UNION para seleccionar valores únicos es:

SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;

Y para seleccionar valores repetidos de columnas:

SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;

Ahora, vamos a obtener los ID de nuestras tablas.

$sql = "SELECT id FROM myguests
UNION
SELECT id FROM messages";

Ahora abre index.php y sustituye la consulta $sql por la anterior. Cuando la ejecutes, tu resultado será

imagen5La consulta ha obtenido todos los identificadores únicos encontrados en ambas tablas.

Unión cruzada o producto cartesiano

Este tipo de JOIN devuelve el producto cartesiano de las filas de las tablas de Join. Devolverá una tabla formada por registros que combinan cada fila de la primera tabla con cada fila de la segunda tabla.

La sintaxis de Cross JOIN es:

SELECT column-name-list

from table-name1

CROSS JOIN

table-name2;

Ahora, vamos a mostrar Cross JOIN utilizando las tablas «misinvitados» y «mensajes»:

Supongamos que queremos listar todas las combinaciones posibles de nombres de la tabla «misinvitados» con mensajes de la tabla «mensajes». Podemos hacerlo mediante un JOIN cruzado:

SELECT myguests.firstname, myguests.lastname, messages.message
FROM myguests
CROSS JOIN
messages;

Esta consulta nos dará una lista con cada combinación de un nombre de la tabla «misinvitados» y un mensaje de la tabla «mensajes».

Self JOIN

Una Autounión es un tipo de unión que combina las filas de una tabla consigo misma. Aunque puede que no resulte inmediatamente evidente su utilidad, en realidad tiene muchas aplicaciones comunes.

Sintaxis de autounión:

SELECT column_name(s)
FROM table1 T1, table1 T2
WHERE condition;

Ahora, vamos a demostrar un Autounión utilizando la tabla «mensajes»:

Supongamos que queremos encontrar pares de mensajes que tengan el mismo remitente. Podemos conseguirlo utilizando un Autounión:

SELECT m1.id, m1.sender, m2.id, m2.sender
FROM messages m1, messages m2
WHERE m1.sender = m2.sender
AND m1.id <> m2.id;

Esta consulta devolverá pares de mensajes con el mismo remitente, excluyendo los casos en los que un mensaje se compare consigo mismo.

Las autouniones son especialmente útiles en situaciones en las que necesitas comparar filas dentro de la misma tabla, como en estructuras jerárquicas o cuando se trata de relaciones recursivas.

UNIÓN EXTERNA COMPLETA

El FULL OUTER JOIN devuelve todos los registros cuando hay una coincidencia en los registros de la tabla izquierda (tabla1) o derecha (tabla2). Básicamente, combina los resultados de la JOIN IZQUIERDA y la JOIN DERECHA.

Nota: ¡Los FULL OUTER JOIN pueden devolver conjuntos de resultados muy grandes!

Sintaxis de la unión externa completa:

SELECT column_name(s)

FROM table1

FULL OUTER JOIN table2 ON table1.column_name = table2.column_name;

He aquí un breve ejemplo para ilustrar el FULL OUTER JOIN:

Supongamos que tenemos dos tablas, «empleados» y «departamentos», y queremos recuperar todos los registros de ambas tablas, incluidos los registros coincidentes y los no coincidentes:

SELECT e.employee_id, e.employee_name, d.department_name
FROM employees e
FULL OUTER JOIN departments d ON e.department_id = d.department_id;

Esta consulta devolverá todos los registros de miembros de equipo, incluidos los que no tengan un departamento correspondiente, y todos los registros de departamentos, incluidos los que no tengan empleados asociados.

JUNTA NATURAL

La unión natural es un tipo de unión en SQL que combina filas de tablas basadas en columnas con el mismo nombre y tipo de datos. Esta unión sólo incluye las columnas comunes una vez en el conjunto de resultados.

Para utilizar la unión natural, puedes combinar dos o más tablas utilizando la siguiente sintaxis:

SELECT column_1, column_2, ..., column_n
FROM table_1
NATURAL JOIN table_2;

Ilustremos la Unión Natural utilizando la tabla «mensajes»:

Imagina que tenemos dos tablas, «mensajes» y «usuarios», ambas contienen una columna llamada «user_id». Nuestro objetivo es obtener todos los registros de ambas tablas en los que coincidan los valores de la columna «user_id»:

SELECT *
FROM messages
NATURAL JOIN users;

Esta consulta ejecutará una unión natural en la columna «user_id», fusionando las filas de ambas tablas en las que coincidan los valores de «user_id». El conjunto de datos resultante incluirá la columna «user_id» sólo una vez.

Resumen

Casi todas las consultas de datos del mundo real se realizan utilizando alguna unión en SQL. Las uniones son como piezas de puzzle que nos ayudan a reunir información de varias fuentes.

En este artículo, hemos hablado de las uniones SQL y de cómo MySQL las utiliza para combinar datos de diferentes tablas.

Si entiendes las uniones, podrás manejar datos sin problemas en tus aplicaciones PHP, independientemente de su estructura.

Q1. ¿Qué comando SQL puedes utilizar para unir dos tablas?

Respuesta: Puedes utilizar el comando INNER JOIN en SQL para combinar dos tablas basándote en una columna común. Sólo recupera los registros coincidentes de ambas tablas, lo que garantiza una forma estructurada y eficaz de combinar datos relacionados.

Por ejemplo:

SELECT orders.order_id, customers.customer_name
FROM orders
INNER JOIN customers ON orders.customer_id = customers.customer_id;

Q2. ¿Cómo unir dos bases de datos en MySQL?

Respuesta: En MySQL, puedes unir tablas de dos bases de datos diferentes mediante la sentencia JOIN. La sintaxis sigue este formato

SELECT
tb_1.*,
tb_2.*
FROM database_1.table_name_1 tb_1
JOIN database_2.table_name_2 tb_2 ON tb_1.id = tb_2.id;

Esta consulta recupera registros coincidentes de tablas de bases de datos distintas haciendo referencia a ellas con nombre_base_de_datos.nombre_tabla.

Q3. ¿Cómo unir dos tablas en SQL con relación muchos a muchos?

Respuesta: Para unir dos tablas con una relación de muchos a muchos, utiliza una tabla de unión que contenga claves externas de ambas tablas.

Por ejemplo, si tienes eventos y participantes, una tabla join como evento_participantes los vincula. Después, utiliza un INNER JOIN para recuperar los registros relacionados:

SELECT e.event_name, p.participant_name
FROM events e
JOIN event_participants ep ON e.id = ep.event_id
JOIN participants p ON ep.participant_id = p.id;

Q4. ¿Se pueden unir dos tablas sin ninguna relación?

Respuesta: Sí, puedes. Para unir dos tablas sin ninguna relación, puedes utilizar CROSS JOIN o UNION.

  • CROSS JOIN empareja cada fila de una tabla con cada fila de otra tabla.
  • UNION combina los resultados de dos consultas SELECT en un único resultado, siempre que las tablas tengan la misma estructura.

Ambos métodos permiten combinar tablas incluso sin clave o relación compartida.

Q5. ¿Podemos unir dos tablas MySQL con los mismos nombres de columna?

Respuesta: Sí, puedes unir dos tablas MySQL con los mismos nombres de columna. Para evitar confusiones, utiliza alias para distinguir las columnas. Esto garantiza que las tablas se unan correctamente sin ningún problema.

Por ejemplo:

SELECT t1.column_name AS t1_column, t2.column_name AS t2_column
FROM table1 t1
JOIN table2 t2 ON t1.id = t2.id;

Q6. ¿Cómo unir 3 tablas en SQL y MySQL?

Respuesta: Para unir tres tablas en SQL o MySQL, puedes utilizar JOINs múltiples. Simplemente une las dos primeras tablas, y luego une la tercera tabla al resultado de la primera unión. Para ello no necesitas necesariamente subconsultas, ya que puedes unir directamente todas las tablas en una sola consulta.

Por ejemplo:

SELECT t1.column1, t2.column2, t3.column3
FROM table1 t1
JOIN table2 t2 ON t1.id = t2.id
JOIN table3 t3 ON t2.id = t3.id;

Q7. ¿Cómo puedo unir dos tablas en SQL sin uniones?

Respuesta: Puedes unir dos tablas en SQL sin utilizar la palabra clave JOIN enumerando ambas tablas en la cláusula FROM, separadas por una coma. Esto se conoce como unión implícita.

Por ejemplo:

SELECT *
FROM TableA a, TableB b
WHERE a.id = b.id;

Aunque este método funciona, generalmente es mejor utilizar declaraciones JOIN explícitas por claridad y rendimiento.

Q8. ¿Qué es un join en MySQL?

Respuesta: Una unión en MySQL combina filas de dos o más tablas basándose en una columna relacionada, a menudo una clave foránea. Te permite recuperar datos de varias tablas en una sola consulta especificando cómo se enlazan las tablas a través de estas claves.

Q9. ¿Es lo mismo join que inner join?

Respuesta: Sí, en MySQL, JOIN es lo mismo que INNER JOIN. Ambos devuelven registros que tienen valores coincidentes en las dos tablas que se están uniendo. Si no se encuentra ninguna coincidencia, no se devuelve ningún registro.

Q10. ¿Cómo unir dos tablas en MySQL?

Respuesta: Para unir dos tablas en MySQL, utiliza la cláusula JOIN en combinación con la palabra clave ON para especificar la condición de coincidencia. Por ejemplo

SELECT columns  
FROM table1  
JOIN table2  
ON table1.common_column = table2.common_column;

Q11. ¿Cómo fusionar dos tablas en MySQL?

Respuesta: Para combinar dos tablas en MySQL, utiliza el operador UNION. Esto combina filas de ambas tablas en un único resultado. Asegúrate de que las tablas tienen el mismo número de columnas y tipos de datos compatibles.

Ejemplo:

SELECT * FROM table1
UNION
SELECT * FROM table2;

Nota: Si quieres incluir todas las filas duplicadas, utiliza UNION ALL en lugar de UNION.

Share your opinion in the comment section. COMMENT NOW

Share This Article

Start Growing with Cloudways Today.

Our Clients Love us because we never compromise on these

Shahzeb Ahmed

Un creativo de día (con una taza de té) y un creativo de noche. Ahmad Kamran es redactor de contenidos estacionales y Ejecutivo de Marketing Senior en Cloudways. Puedes encontrarle en su escritorio escribiendo, elaborando estrategias o jugando. Y en caso de que no puedas encontrarle aquí, estará en la montaña o junto a la orilla del río.

×

Webinar: How to Get 100% Scores on Core Web Vitals

Join Joe Williams & Aleksandar Savkovic on 29th of March, 2021.

Do you like what you read?

Get the Latest Updates

Share Your Feedback

Please insert Content

Thank you for your feedback!

Do you like what you read?

Get the Latest Updates

Share Your Feedback

Please insert Content

Thank you for your feedback!

Want to Experience the Cloudways Platform in Its Full Glory?

Take a FREE guided tour of Cloudways and see for yourself how easily you can manage your server & apps on the leading cloud-hosting platform.

Iniciar mi recorrido