Error SQL · resolución de nombres

Columna ambigua en SQL: identifica de qué tabla viene

Cuando varias tablas tienen columnas con el mismo nombre, califica la referencia con un alias y comprueba que escogiste la entidad correcta.

Lectura: 12–16 minEjemplo reproduciblePráctica con pistas

El síntoma: el nombre de una columna existe en más de una tabla

Al unir tablas es habitual que ambas tengan columnas llamadas id, nombre, fecha o estado. Si escribes solo el nombre y el motor no puede determinar a qué origen te refieres, la referencia es ambigua.

PostgreSQL identifica esta condición como ambiguous_column (SQLSTATE 42702). SQL Server también recomienda calificar una columna cuando varias tablas del FROM comparten el mismo nombre.

Ejemplo reproducible: id pertenece a dos relaciones

SQL ambiguo
WITH clientes(id, nombre) AS (
  VALUES (1, 'Ana'), (2, 'Luis')
), pedidos(id, cliente_id) AS (
  VALUES (101, 1), (102, 2)
)
SELECT id, nombre
FROM clientes
JOIN pedidos
  ON clientes.id = pedidos.cliente_id;

Tanto clientes como pedidos tienen una columna id. El motor necesita saber cuál quieres proyectar.

Califica la columna y usa alias consistentes

SQL corregido
WITH clientes(id, nombre) AS (
  VALUES (1, 'Ana'), (2, 'Luis')
), pedidos(id, cliente_id) AS (
  VALUES (101, 1), (102, 2)
)
SELECT c.id AS cliente_id,
       c.nombre,
       p.id AS pedido_id
FROM clientes AS c
JOIN pedidos AS p
  ON c.id = p.cliente_id
ORDER BY c.id;
Resultado sin ambigüedad
cliente_idnombrepedido_id
1Ana101
2Luis102

Método de diagnóstico

  1. Busca el nombre señalado en todas las tablas y subconsultas visibles en ese nivel.
  2. Decide el origen correcto según la intención, no según el alias más corto.
  3. Califica la referencia con alias.columna.
  4. Si el SELECT devuelve dos columnas parecidas, renómbralas con alias de salida que expliquen su significado.

No mezcles el nombre real de la tabla con su alias

Cuando asignas un alias, úsalo de forma consistente en esa consulta. Además de evitar ambigüedad, los prefijos cortos hacen visible la procedencia de cada columna en JOINs de varias tablas.

Buena señal: otra persona puede leer p.id y c.id y saber inmediatamente que son identificadores de entidades distintas.

Error frecuente: calificar todas las columnas sin pensar en su significado

Resolver el parser no basta

Es posible eliminar el mensaje escogiendo una de las dos columnas y aun así elegir la columna equivocada. Antes de añadir el prefijo, pregunta qué entidad debe representar el valor en esa posición.

Práctica correctiva

Básica · alias y JOIN

Distingue el identificador del cliente y el del pedido

Modifica un SELECT que contiene id para devolver ambos identificadores con nombres de salida distintos.

Qué debes recordar

  • Una columna es ambigua cuando más de un origen visible puede resolver el mismo nombre.
  • Usa alias.columna para hacer explícita la procedencia.
  • Los alias de salida deben distinguir entidades diferentes aunque sus columnas originales compartan nombre.
  • Resolver la ambigüedad sintáctica no sustituye comprobar que elegiste la columna correcta.

Conceptos relacionados

Fuentes técnicas consultadas