- Domina INNER/LEFT/RIGHT JOIN, uniones desiguales y cómo evitar combinaciones cruzadas accidentales.
- Emula FULL OUTER JOIN con UNION y controla los tipos de datos con trucos como IIf(False,0,Null).
- Resuelve colisiones de autonuméricos, activa actualizaciones en cascada y define reglas claras para conflictos.
Cuando trabajas con varias bases de datos de Microsoft Access, tarde o temprano surge la necesidad de unificarlas sin perder información ni romper vínculos. En el mundo real, es habitual que existan copias divergentes de la misma BD, tablas separadas por proyecto o importaciones periódicas desde sistemas externos. Saber cómo fusionarlas bien marca la diferencia entre un sistema estable y un caos de duplicados.
En esta guía práctica desgranamos, paso a paso, todo lo que necesitas: desde cómo funcionan las combinaciones (JOIN) en Access y sus tipos, hasta trucos con consultas UNION, resolución de colisiones de autonuméricos, detección de conflictos y recomendaciones cuando dos archivos .accdb han evolucionado por separado. Además, incluimos una pincelada útil sobre combinar PDF desde VBA sin Adobe Acrobat, por si tu flujo de trabajo lo exige.
Qué significa realmente fusionar múltiples archivos Access
Fusionar no es solo copiar y pegar. En la práctica significa consolidar tablas homólogas, mantener integridad referencial y decidir criterios para resolver registros duplicados o en conflicto. Implica, además, comprender cómo Access relaciona tablas y cómo se combinan datos de distintos orígenes, algo que se realiza mediante combinaciones (JOIN) en consultas o a través de consultas UNION cuando lo que quieres es apilar conjuntos de resultados compatibles.
Antes de empezar, conviene revisar estructura, claves y relaciones de cada archivo. Tener claro qué tablas son maestras, cuáles son dependientes y qué campos actúan como claves (principal y foráneas) te ahorrará muchos sustos. Una mínima preparación como activar actualizaciones en cascada en relaciones bien definidas puede evitar que, al cambiar un identificador, se queden colgados los registros hijos.
Relaciones y combinaciones (JOIN) en Access: la base de todo
Una base de datos se construye con tablas relacionadas entre sí por campos comunes. En Access, esas relaciones se traducen en líneas de combinación en la Vista de diseño de consultas: una línea une los campos que hacen de vínculo y define cómo se unen los datos. En relaciones uno a varios, Access incluso muestra un 1 y el símbolo ∞ sobre la línea si has aplicado la integridad referencial.
Las combinaciones funcionan como un filtro inteligente: definen qué filas de cada lado se emparejan y cómo. Además de filtrar, la combinación hace que cada par que cumple la condición se convierta en una sola fila del resultado. Por eso es clave conocer el tipo de combinación que estás utilizando y, si hace falta, abrir las Propiedades de la combinación (doble clic en la línea) para ajustar el comportamiento.
Tipos de combinaciones (JOIN) en Access
Combinación interna (INNER JOIN)
La combinación interna devuelve únicamente las filas de ambas tablas que tienen valores coincidentes en el campo o campos de unión. Es el tipo más frecuente y, de hecho, Access la crea automáticamente cuando detecta relaciones o campos compatibles. Si no especificas el tipo, Access asume INNER JOIN por defecto.
Cuando añades dos tablas a una consulta, si comparten un campo de tipos compatibles (y uno de ellos es clave principal), Access tiende a crear la combinación por ti. Si trabajas con consultas como orígenes, es habitual que tengas que crear el vínculo manualmente arrastrando un campo sobre el otro en la rejilla de diseño, lo que dibuja la línea de unión.
Sintaxis SQL de INNER JOIN en la cláusula FROM, con cualquier operador relacional válido (igual, desigual, mayor/menor, etc.):
FROM tabla1 INNER JOIN tabla2
ON tabla1.campo1 = tabla2.campo2
Ten en cuenta que, salvo casos muy concretos, el operador más común es el de igualdad; usar otros operadores crea lo que se conoce como combinaciones desiguales (lo veremos más abajo).
Combinación externa izquierda y derecha (LEFT JOIN/RIGHT JOIN)
Una combinación externa incluye todas las filas de uno de los lados aunque no tengan coincidencia en el otro. En un LEFT JOIN, se listan todas las filas de la tabla izquierda y solo las coincidentes de la derecha; en un RIGHT JOIN, ocurre al revés. Esto es muy útil para conservar registros “huérfanos” de un lado cuando estás auditando cobertura o completitud.
Para convertir una unión interna en externa, en Vista diseño haz doble clic en la línea de combinación, elige la opción de incluir todos los registros de un lado, pulsa Aceptar y verás que la línea muestra una flecha de dirección indicando de qué tabla se incluyen todas las filas.
Puede suceder que mezcles una LEFT JOIN con una INNER JOIN en la misma consulta y Access no sepa cuál ejecutar primero. En ese caso aparece un error de ambigüedad. La solución pasa por reordenar la consulta, dividirla en subconsultas o dejar claro el orden de evaluación reorganizando las combinaciones para que no haya ambigüedad.
Sintaxis SQL de LEFT/RIGHT JOIN en la cláusula FROM:
FROM tabla1 LEFT JOIN tabla2
ON tabla1.campo1 = tabla2.campo2
FROM tabla1 RIGHT JOIN tabla2
ON tabla1.campo1 = tabla2.campo2
Combinación externa completa (FULL OUTER) mediante UNION
Access no incluye un FULL OUTER JOIN como tal, pero puedes emularlo uniendo con UNION el resultado de un LEFT JOIN con el de un RIGHT JOIN y filtrando para no duplicar las filas coincidentes. La idea es sencilla: combinar todas las filas de ambos lados y emparejarlas donde hay coincidencia, dejando nulos donde no.
Esquema de trabajo típico:
- Construir una consulta con LEFT JOIN sobre el campo de unión.
- Copiar su SQL, cambiar LEFT por RIGHT y pegar bajo un UNION.
- En la parte RIGHT, añadir una cláusula WHERE comprobando que el campo clave de la tabla izquierda sea IS NULL para no duplicar las coincidencias.
De ese modo replicas el efecto del FULL OUTER en Access aun sin soporte nativo, manteniendo un resultado coherente y completo en ambos sentidos.
Combinaciones cruzadas (CROSS JOIN)
Una combinación cruzada empareja cada fila de una tabla con cada fila de la otra (producto cartesiano). Suele ocurrir cuando agregas tablas a la consulta y olvidaste definir su vínculo, dando como resultado miles de combinaciones sin sentido y tiempos de ejecución largos. Aun así, hay escenarios útiles: por ejemplo, estudiar todas las combinaciones posibles de clientes con distintos porcentajes de devolución teórica (91 clientes por 5 porcentajes = 455 filas hipotéticas).
Si ves un número de registros disparatado en tu consulta, revisa que todas las tablas tengan su combinación explícita. Normalmente basta con arrastrar los campos correctos para evitar un CROSS JOIN accidental y volver a un resultado consistente.
Combinaciones desiguales (no-equi JOIN)
Las uniones no tienen por qué basarse en la igualdad. Puedes usar operadores como >, <, >=, <= o <> para unir rangos, banderas o condiciones más complejas. En Access, este tipo de uniones no se diseña desde la vista visual: debes cambiar a Vista SQL, localizar el operador = y sustituirlo por el que necesites. Importante: si cambias a una desigualdad, puede que no puedas volver a abrir la consulta en el diseñador hasta revertir el operador a =.
Consultas UNION: apilar resultados y armonizar tipos
Las UNION son el pegamento perfecto cuando quieres apilar resultados de varias consultas en una sola tabla virtual, siempre que tengan el mismo número de columnas y tipos compatibles. Son clave cuando necesitas imitar un FULL OUTER JOIN o cuando deseas combinar transacciones de naturaleza diferente en la misma vista.
Un caso típico: tienes una consulta de transacciones de productos y quieres dividir una cantidad en dos columnas, Comprar y Vender. Una primera aproximación es usar 0 en la columna que no aplique, y apilar la parte de ventas con la parte de compras. Si sustituyes más tarde el 0 por Null para no mostrar ceros, puedes toparte con un efecto colateral: Access infiere el tipo de datos de cada columna a partir de la primera SELECT de la UNION.
Si la primera SELECT devuelve Null (no numérico), Access puede “decidir” que la columna es de texto o nula, afectando al resto. Si intentas poner cadenas vacías «» en la SELECT inicial, Access las considera texto y, por arrastre, convierte toda la columna en texto (lo notarás porque aparecen alineadas a la izquierda en la hoja de datos).
Truco simple para forzar a Access a tratar la columna como numérica y permitir valores Null: usa una expresión de este estilo, que siempre devuelve Null pero obliga a evaluar salida numérica:
IIf(False, 0, Null)
Aplicado a una UNION de compras y ventas, una estructura válida podría ser:
SELECT , , , ,
IIf(False, 0, Null) AS Buy, AS Sell
FROM
UNION
SELECT , , , ,
AS Buy, Null AS Sell
FROM
ORDER BY DESC;
Alternativa avanzada: anteponer una SELECT “plantilla” que define tipos y no devuelve filas. Es el patrón de SELECT con WHERE False, que fija el tipo de cada columna sin contaminar el resultado:
SELECT 0 AS , Date() AS ,
"" AS , "" AS ,
0 AS Buy, 0 AS Sell
FROM
WHERE False
UNION
SELECT , , , , Null AS Buy, AS Sell
FROM
UNION
SELECT , , , , AS Buy, Null AS Sell
FROM
ORDER BY DESC;
Este enfoque hace que Access reconozca correctamente tipos numéricos con Null, evitando conversiones indeseadas a texto cuando hay cadenas vacías en alguna sección de la UNION.
Guía práctica: fusionar dos bases de datos Access que se han bifurcado
Escenario clásico: dos personas empezaron a introducir datos en una copia de seguridad y ahora tienes dos archivos casi idénticos pero con cambios distintos. Lo primero es reconocer que Access, salvo que lo hayas previsto, no guarda un campo “última modificación” por registro de forma automática. Puedes añadirlo a partir de ahora con Now() y eventos de formulario, pero, si ya ocurrió la bifurcación, necesitarás reglas para decidir qué versión se queda de cada registro.
Pasos recomendados para proceder con seguridad:
- Copia de seguridad y Compactar/Reparar: duplícalo todo y ejecuta Compactar y reparar en cada archivo para empezar desde una base limpia.
- Audita estructura: compara tablas y campos, identifica la clave principal de cada tabla y anota relaciones. Si es posible, añade un campo FechaUltimaEdicion y rellénalo con la mejor señal que tengas (fechas de pedido, fecha de creación, etc.).
- Resuelve colisiones de autonuméricos: si ambas bases comparten IDs Autonumérico que puedan chocar, aplica el truco de “desplazar” una de ellas. Cambia en una de las bases el campo Autonumérico a tipo Numérico (Entero largo) y ejecuta una actualización sumándole el máximo ID de la otra base. Así, garantizas que ningún identificador se pisa.
Un ejemplo de actualización para desplazar IDs en la tabla principal podría ser algo como: sumar a el valor máximo detectado en la otra base. Con ello evitas duplicidades y, gracias a las actualizaciones en cascada en las relaciones, las tablas hijas quedan referenciadas al nuevo ID.
Después, importa todas las tablas de la base ajustada a la base “destino” y crea una consulta de datos anexados para unir los conjuntos. Si existen conflictos (mismo ID con contenido distinto) define una política: quedarte con el registro con fecha más reciente, o conservas ambos con un sufijo y marcas uno como “requiere revisión”.
Para detectar duplicados y conflictos, son muy útiles los patrones de consulta de registros coincidentes/no coincidentes. Por ejemplo, para hallar registros sin pareja en el otro lado:
SELECT A.*
FROM TablaA AS A
LEFT JOIN TablaB AS B
ON A.ID = B.ID
WHERE B.ID IS NULL;
Y para comparar dos versiones con igual ID, puedes listar aquellas filas donde alguna columna de interés difiera. En la práctica, resulta cómodo crear vistas de “pendientes de conciliar” y resolver caso a caso cuando no existe un campo de fecha inequívoco.
Por último, verifica las relaciones en la ventana Relaciones (menú Herramientas). Incluye todas las tablas y vincúlalas por sus claves. Activa la casilla de Actualización en cascada cuando tenga sentido: así, si cambias el identificador en la principal, se propaga a la secundaria y no rompes los vínculos.
Importar y unir varias tablas de una tacada
En algunos flujos de trabajo, la ventana de acceso a datos te permite seleccionar hasta cinco tablas en la misma operación de importación y definir uniones pareadas. El proceso consiste en elegir las tablas, llevarlas a un área temporal y unirlas de dos en dos mediante un campo clave común (por ejemplo, IdCliente). Si los valores coinciden, el resultado empareja los registros individuales.
En un esquema con más de dos tablas, la “tabla izquierda” es la primera del par y la “tabla derecha” la segunda. Puedes encadenar varias uniones (Cliente con Pedidos, y luego Pedidos con Producto). Observa que una misma tabla puede ser izquierda en una unión y derecha en otra, según el tramo del encadenado. También puedes unir por más de un campo cuando un único campo no sea suficientemente único.
Limitación a tener en cuenta: con ciertos orígenes como Apache Drill, el editor visual solo permite unir dos tablas. Si quieres combinar tres o más, hazlo en modo SQL y evita paréntesis en la declaración de unión, ya que no son compatibles en ese conector concreto. Es un detalle muy específico, pero conviene saberlo cuando los datos vienen de fuentes heterogéneas.
Eliminar combinaciones erróneas
Si Access crea una combinación automática que no quieres, o te equivocas al arrastrar campos, elimínala sin miedo: en la rejilla de diseño, haz clic en la línea y pulsa Suprimir, o bien usa el clic derecho y elige Eliminar. Mantener solo las combinaciones necesarias es clave para evitar cruces accidentales y obtener resultados fiables.
Buenas prácticas al usar INNER, LEFT y RIGHT JOIN
Una regla de oro es probar cada combinación con filtros sencillos para comprobar que devuelve el número esperado de filas. Si mezclas INNER y LEFT en la misma consulta y Access marca ambigüedad, divide el problema: construye primero la parte INNER en una consulta guardada y úsala como origen en la consulta que aplicará el LEFT, dejando clara la secuencia de evaluación.
Otro consejo práctico: documenta en comentarios (propiedades de la consulta) qué hace cada combinación y por qué. Cuando otros compañeros abran la BD, agradecerán ver el motivo de un RIGHT JOIN poco habitual o de una combinación desigual que filtra por rangos.
Trucos de SQL en Access para el día a día
Además de los patrones anteriores (IIf(False,0,Null) y SELECT plantilla con WHERE False), recuerda que en Access puedes usar operadores relacionales en las uniones para resolver escenarios de solapamiento de fechas o de segmentos. Una desigualdad bien colocada sustituye muchas veces a subconsultas complejas y te permite traer exactamente el conjunto de filas que necesitas.
Y si en una UNION quieres mantener filas duplicadas a propósito (por ejemplo, porque necesitas contar apariciones), sustituye UNION por UNION ALL. Access elimina duplicados con UNION, pero no con UNION ALL, algo que puede ser decisivo según tu informe final.
Extra: combinar PDF desde Access con VBA (sin Acrobat)
Hay quien necesita sacar varios informes en PDF y concatenarlos en uno solo desde Access. Si no cuentas con Adobe Acrobat, existen utilidades en VBA que lo resuelven en pocas líneas. Una propuesta conocida es la del desarrollador Albert Kallal, que ofrece un módulo sencillo para unir PDFs desde Access sin depender de Acrobat. Es una solución ágil para automatizar la generación de dossiers o entregables unificados directamente desde tus procesos de base de datos.
La idea general es pasarle una lista de rutas de archivos PDF y una salida de destino; el módulo se encarga de coserlos. Así integras en tu flujo la fusión de PDFs como un paso más, igual que lanzar consultas o exportar informes.
Con todo lo anterior, ya tienes el mapa completo: comprender cómo Access une datos (INNER/LEFT/RIGHT, desigual y cruzada), emular un FULL OUTER con UNION, medir el impacto de tipos de datos en consultas UNION, ajustar relaciones y autonuméricos para evitar choques, y rematar con automatizaciones prácticas como la fusión de PDFs. Cuando dominas estos bloques, fusionar múltiples archivos de Access pasa de ser una odisea a un proceso controlado y repetible, incluso con equipos trabajando en paralelo.
Redactor apasionado del mundo de los bytes y la tecnología en general. Me encanta compartir mis conocimientos a través de la escritura, y eso es lo que haré en este blog, mostrarte todo lo más interesante sobre gadgets, software, hardware, tendencias tecnológicas, y más. Mi objetivo es ayudarte a navegar por el mundo digital de forma sencilla y entretenida.