Volver a la lista de artículos Artículos
Lectura de 7 minutos

¿Se pueden unir dos tablas sin una columna en común?

Sí, se puede. La respuesta larga es sí, hay formas de combinar dos tablas sin una columna en común, incluyendo el uso de CROSS JOIN (producto cartesiano) y UNION. Esta última no es técnicamente una unión, pero puede ser útil para combinar tablas en SQL. En este artículo, te guiaré con ejemplos a través de las diferentes soluciones.

¿Cuándo es necesario unir tablas sin una columna en común?

Quienes se inician en SQL suelen conocer las uniones equi estándar, en las que dos tablas se combinan mediante una columna en común. Sin embargo, las tareas del mundo real de un analista de datos suelen ser más diversas y complejas.

Por ejemplo, hay muchos casos de uso para una unión no-equi, cuando dos tablas se combinan utilizando operadores condicionales distintos del signo de igualdad. Si no estás familiarizado con este tipo de JOIN, consulta nuestro curso interactivo Tipos de JOIN en SQL. Ofrece más de 90 ejercicios prácticos sobre diferentes tipos de JOIN.

En algunos casos, es posible que se desee disponer de todas las combinaciones de las filas de las dos tablas. Por ejemplo, si tienes un restaurante, quizás quieras ver todas las combinaciones posibles de vinos de tu carta de vinos y platos principales de tu menú.

O bien, imagina que la información sobre tus proveedores está almacenada en tablas diferentes. Puede que tengan diferentes nombres de columna por tipo de producto (por ejemplo, vinos, jugos, frutas, etc.). Quizás quieras combinar toda la información para generar una única tabla con todos los proveedores.

En estos casos, querrás combinar dos o más tablas sin requerir una columna en común. Parece que debería ser una tarea SQL bastante sencilla. Y, por supuesto, ¡lo es! En esta guía sugeriré un par de soluciones.

Primero, exploremos los datos que usaremos para nuestros ejemplos.

Conociendo los datos

Tenemos un restaurante y datos relevantes almacenados en múltiples tablas, entre las que se encuentran wine (vino) y main_course (plato principal).

La tabla wine contiene el ID del vino, el nombre del vino, el ID del proveedor y el precio:

idnamesupplier_idprice
1Merlot5007.95
2House4002.45
3Sangiovese6005.20

La tabla main_course contiene el ID del plato principal, el nombre, el ID del proveedor principal de este plato y el precio para cada plato:

main_course

idnamemajor_supplier_idprice
1Cardamom Maple Salmon20019.99
2Classic Macaroni & Cheese1008.99
3Baked Teriyaki Chicken30011.99
4Blue Cheese Beef Tenderloin40015.99

Veamos cómo podemos combinar estas tablas para obtener los resultados que queremos.

Cómo combinar dos tablas sin una columna en común

En nuestro primer ejemplo, queremos ver todas las posibles combinaciones de vinos y platos principales de nuestro menú. Hay al menos dos enfoques para combinar las tablas wine y main_course para obtener el resultado que necesitamos.

Uso de la Sintaxis "FROM Tabla1, Tabla2"

Una forma de unir dos tablas sin una columna en común es utilizar una sintaxis obsoleta para unir tablas. Con esta sintaxis, simplemente listamos las tablas que queremos unir en la cláusula FROM y luego usamos una cláusula WHERE para añadir condiciones de unión si es necesario.

Si lo que queremos es cada combinación de filas de dos tablas, no es necesario incluir ninguna condición de unión. Podemos utilizar una consulta como la siguiente:

SELECT w.name AS wine, m.name AS main_course
FROM wine w, main_course m;

La consulta devolverá un producto cartesiano (una unión cruzada), cuyo conjunto de resultados tiene el número total de filas igual al número de filas de la primera tabla multiplicado por el número de filas de la segunda tabla.

winemain_course
MerlotCardamom Maple Salmon
HouseCardamom Maple Salmon
SangioveseCardamom Maple Salmon
MerlotClassic Macaroni & Cheese
HouseClassic Macaroni & Cheese
SangioveseClassic Macaroni & Cheese
MerlotBaked Teriyaki Chicken
HouseBaked Teriyaki Chicken
SangioveseBaked Teriyaki Chicken
MerlotBlue Cheese Beef Tenderloin
HouseBlue Cheese Beef Tenderloin
SangioveseBlue Cheese Beef Tenderloin

Obtenemos el resultado que queríamos. Esta es una solución viable para unir dos tablas cuando el objetivo es obtener un conjunto de resultados con todas las combinaciones posibles de las filas. Sin embargo, este no es el mejor enfoque.

Los profesionales de SQL prefieren utilizar la palabra clave explícita CROSS JOIN para este tipo de operaciones. Esto deja claro que estamos realizando una unión cruzada de forma intencionada y no omitiendo accidentalmente la condición de unión WHERE, lo que podría ocurrir al utilizar sintaxis obsoleta para unir tablas.

Lee más sobre los beneficios de la nueva sintaxis para unir tablas, en nuestro artículo ¿Cuál es la diferencia entre JOIN y múltiples tablas en FROM?

Uso del operador CROSS JOIN

Como ya habrás adivinado, el segundo enfoque para obtener todas las combinaciones posibles de las filas de dos tablas es utilizar el operador CROSS JOIN:

SELECT w.name AS wine, m.name AS main_course
FROM wine w
CROSS JOIN main_course m;

Esta consulta produce exactamente el mismo conjunto de resultados que el mostrado anteriormente. Sin embargo, es preferible esta sintaxis ya que indica claramente la intención de realizar una CROSS JOIN (unión cruzada) y es más legible para otros usuarios que vayan a leer su código SQL.

Aprenda más sobre las uniones cruzadas en nuestra guía ilustrada de SQL CROSS JOIN.

Uso de UNION o UNION ALL

Hay otros casos de uso para combinar dos tablas sin una columna en común. Como en el ejemplo mencionado anteriormente, se puede querer consolidar toda la información de proveedores almacenada en múltiples tablas. En este caso no queremos un producto cartesiano. Entonces, ¿cómo se combinan las tablas?

En este caso, se utiliza UNION para combinar la información de varias tablas. No se trata técnicamente de una unión; sin embargo, puede ser muy útil para combinar filas de varias tablas, como en nuestro ejemplo siguiente.

En pocas palabras, JOIN combina datos añadiendo las columnas de una tabla a las de otra. Por el contrario, UNION combina los datos añadiendo las filas junto a las filas de otra tabla.

De este modo, si queremos generar una lista combinada de los ID de los proveedores a partir de las tablas wine y main_course podemos utilizar la siguiente consulta SQL:

SELECT w.supplier_id
FROM wine w
UNION
SELECT m.major_supplier_id
FROM main_course m
ORDER BY supplier_id;

Aquí, primero seleccionamos los ID de los proveedores de la tabla wine (columna supplier_id) y de la tabla main_course (columna major_supplier_id) por separado. A continuación, combinamos estas filas utilizando la palabra clave UNION. Por último, ordenamos el resultado por comodidad:

supplier_id
100
200
300
400
500
600

Tenga en cuenta lo siguiente cuando utilice UNION en SQL:

  • Todas las sentencias SELECT deben incluir el mismo número de columnas.
  • Las columnas correspondientes deben tener el mismo tipo de datos.
  • Las columnas correspondientes pueden tener nombres diferentes, como ocurre en nuestro ejemplo. De manera predeterminada, el nombre de la columna correspondiente en la salida se tomará de la primera sentencia SELECT. Si es necesario, se pueden establecer los nombres de las columnas resultantes utilizando la palabra clave AS. Tenga en cuenta que las columnas de diferentes tablas tienen que tener el mismo nombre para que se correspondan correctamente.
  • El operador UNION elimina los duplicados del conjunto de resultados. Como habrás notado, el valor supplier_id 400 estaba en ambas tablas, pero sólo aparece una vez en el conjunto de resultados. Si no quieres que los duplicados sean eliminados, en su lugar utiliza el operador UNION ALL:

    SELECT w.supplier_id
    FROM wine w
    UNION ALL
    SELECT m.major_supplier_id
    FROM main_course m
    ORDER BY 1;
    

El resultado de esta consulta incluirá el valor supplier_id 400 dos veces:

supplier_id
100
200
300
400
400
500
600

Si ni CROSS JOIN ni UNION son aplicables a tu caso de uso de combinar dos tablas sin una columna en común, consulta este artículo con ejemplos de uniones no-equi. Allí podrás encontrar algunos ejemplos útiles.

¡Es hora de practicar CROSS JOIN y UNION!

Ahora ya sabes mucho más sobre la combinación de tablas sin una columna en común. Estarás en condiciones de responder a la pregunta sobre cómo combinar dos tablas sin una columna en común, ¡una pregunta muy frecuente en las entrevistas de trabajo con SQL!

Si quieres aprender más sobre JOIN, echa un vistazo al video SQL JOIN Basics de nuestra serie "We Learn SQL" en YouTube. Además, prueba la guía LearnSQL.essobre las mejores formas de aprender Tipos de JOIN en SQL.

De todos modos, probablemente ya sepas que el camino más corto para convertirte en un experto en SQL es con mucha práctica escribiendo consultas SQL. LearnSQL.es ofrece un curso completo en Tipos de JOIN en SQL con 93 ejercicios interactivos. En este curso, tendrás la oportunidad de practicar todo tipo de JOIN básico, incluyendo CROSS JOIN, auto-uniones, uniones no-equi y uniones de múltiples tablas.

¡Feliz aprendizaje!