
Microsoft Access sigue siendo, en muchas empresas, la herramienta de consulta rápida para explotar archivos locales o fuentes ODBC. El motor ACE (sucesor de Jet), siempre integrado en Microsoft 365, ejecuta aplicaciones internas que a veces tienen varias décadas. Aprender a escribir consultas SQL directamente en Access permite entender lo que la cuadrícula QBE genera en segundo plano y actuar cuando el resultado no coincide con lo esperado.
Jet/ACE SQL y SQL estándar: lo que Access acepta y lo que rechaza
La mayoría de los tutoriales SQL en línea utilizan MySQL, PostgreSQL o SQL Server como referencia. Los ejemplos a menudo funcionan tal cual en estos motores, pero no siempre en Access. El dialecto SQL de Access (Jet/ACE SQL) tiene particularidades que desconciertan a los principiantes acostumbrados a copiar y pegar código encontrado en un foro.
Access no soporta ni CTE (WITH) ni funciones de ventana disponibles en SQL Server o PostgreSQL. Cualquier consulta recursiva o analítica encontrada en línea deberá ser reescrita, a menudo con la ayuda de subconsultas anidadas o consultas temporales guardadas.
En cambio, Access ofrece la cláusula TRANSFORM para consultas cruzadas, una sintaxis ausente en la norma SQL. Esta cláusula permite pivotar filas en columnas sin pasar por una hoja de cálculo. Aquellos que desean aprender consultas SQL en Access ahorran tiempo al identificar estas diferencias desde el principio, en lugar de buscar por qué un ejemplo genérico provoca un error de sintaxis.
Otra diferencia notable: la sintaxis de unión. Access a menudo impone paréntesis anidados cada vez que se encadenan varias JOIN en una misma consulta, mientras que otros motores aceptan una escritura lineal. Olvidar estos paréntesis desencadena un error de compilación sin un mensaje explícito.

Modo SQL de Access: pasar del gráfico a la escritura directa
El diseñador de consultas gráfico (cuadrícula QBE) es el punto de entrada habitual en Access. Cada acción, arrastrar un campo, marcar una casilla de ordenación, establecer un criterio, genera SQL en segundo plano. Cambiar al modo SQL (pestaña « Vista » y luego « Modo SQL ») muestra la consulta tal como el motor ACE la va a ejecutar.
Leer antes de escribir
Antes de redactar una consulta desde cero, el método más eficaz consiste en construir la consulta en modo gráfico y luego leer el SQL producido. Esta lectura permite asociar cada elemento visual (tabla, enlace, criterio) con su traducción SQL. Se identifica rápidamente la estructura SELECT, FROM, WHERE, ORDER BY.
Una vez adquirida esta correspondencia, modificar directamente el SQL se vuelve natural. Se añade una función, se reemplaza un criterio, se inserta un GROUP BY, todo sin volver a pasar por la cuadrícula.
Los comandos básicos en el contexto de Access
- SELECT y FROM: seleccionar campos de una o varias tablas. Access utiliza el punto para separar el nombre de la tabla del nombre del campo (Clientes.Nombre), y los corchetes para encerrar los nombres que contienen espacios o caracteres especiales ([Fecha de pedido]).
- WHERE: filtrar registros. Los operadores de comparación clásicos funcionan, pero los comodines difieren: Access utiliza el asterisco (*) en lugar del porcentaje (%) con el operador LIKE.
- JOIN: relacionar tablas entre sí. Access prefiere la sintaxis INNER JOIN, LEFT JOIN, RIGHT JOIN con la restricción de paréntesis múltiples mencionada anteriormente.
- ORDER BY y GROUP BY: ordenar y agrupar. La cláusula HAVING funciona como en el SQL estándar, lo que simplifica el filtrado después de la agregación.
Errores frecuentes al comenzar con SQL en Access
Algunos errores son recurrentes entre los principiantes. Identificarlos de antemano evita horas de depuración frustrante.
El primero se refiere a los corchetes faltantes alrededor de los nombres de campos. En cuanto un nombre de columna contiene un espacio, un acento o un carácter reservado, Access exige corchetes. Escribir Fecha de pedido en lugar de [Fecha de pedido] provoca un error inmediato.
El segundo se refiere a los tipos de datos. Access distingue las comillas dobles para texto en ciertas versiones y las comillas simples en otros contextos. El símbolo de número (#) encierra las fechas: WHERE [Fecha de pedido] > #01/01/2024#. Usar comillas en lugar del símbolo de número para una fecha es una fuente de confusión muy común.
El tercer error se refiere a las uniones múltiples. Cada par de JOIN debe estar encapsulado en paréntesis cuando se superan dos tablas. El mensaje de error mostrado por Access en este caso es poco explícito, lo que lleva a muchos principiantes a abandonar la consulta SQL y volver a la cuadrícula gráfica.

Progresar más allá de las consultas SELECT en Access
Una vez dominadas las consultas de selección, Access abre la puerta a las consultas de acción: INSERT INTO, UPDATE y DELETE. Estos comandos funcionan de manera similar al SQL estándar, con una precaución adicional: Access ejecuta las consultas de acción sin pedir confirmación por defecto si las advertencias están desactivadas en las opciones de la base.
Probar primero en modo selección (transformar temporalmente el UPDATE en SELECT para verificar las filas objetivo) sigue siendo una buena práctica antes de cualquier modificación de datos.
Las consultas cruzadas, accesibles a través de la cláusula TRANSFORM, merecen atención. Permiten producir una tabla de resumen directamente utilizable, sin exportar a Excel. La sintaxis es específica de Access: TRANSFORM seguido de la función de agregación, luego un SELECT clásico complementado por un PIVOT sobre el campo a transponer en columnas.
Para aquellos que deseen conectar Access a fuentes externas (SQL Server, archivos CSV a través de ODBC), las consultas SQL passthrough constituyen una opción avanzada. Envían el SQL directamente al servidor remoto, eludiendo así las limitaciones del motor ACE. El SQL escrito en este modo debe respetar la sintaxis del servidor de destino, no la de Access.
El dialecto SQL de Access tiene sus límites, pero ofrece un terreno de aprendizaje concreto para quienes ya trabajan con esta herramienta a diario. Dominar las particularidades de Jet/ACE SQL evita reproducir ciegamente ejemplos inapropiados y proporciona una base sólida para luego migrar a motores más potentes.