Error SQL · resolución de nombres

Columna no existe en SQL: comprueba nombre, tabla y alcance

Cuando el motor no puede resolver una columna, cambiar filtros o añadir DISTINCT no ayuda. Primero confirma que el nombre existe en el esquema, que pertenece a una tabla visible en esa parte de la consulta y que no estás usando un alias fuera de su alcance.

Lectura: 10–14 minDiagnóstico portablePráctica correctiva

El síntoma: el nombre parece una columna, pero el motor no puede resolverlo

El mensaje cambia por motor, pero la pregunta de diagnóstico es la misma: ¿ese identificador existe y está visible exactamente donde lo usas? PostgreSQL clasifica este caso como undefined_column (SQLSTATE 42703), MySQL 8.4 documenta el error 1054 como Unknown column y SQL Server usa el error 207 para Invalid column name.

No lo confundas con una columna ambigua: allí el nombre existe en más de una tabla y falta decidir de cuál proviene. Aquí el motor no encuentra una columna válida para ese nombre en el contexto actual.

Ejemplo: pedir una columna que no está en la tabla

En la base educativa de AprenderSQL.es, productos contiene id, nombre, categoria, categoria_id, precio y stock. Esta consulta pide precio_final, que no existe:

Consulta con error
SELECT nombre, precio_final
FROM productos;

Resultado local: al ejecutar este ejemplo sobre la base SQLite incluida en el proyecto, el motor responde no such column: precio_final. El texto exacto del mensaje no es portable; la causa sí lo es: ese nombre no puede resolverse como una columna visible.

La corrección no consiste en “forzar” el nombre. Usa la columna real que representa el dato que necesitas:

Corrección
SELECT id, nombre, precio
FROM productos
WHERE id IN (1, 2, 3)
ORDER BY id;
Resultado comprobado en SQLite
idnombreprecio
1Ratón24.9
2Teclado49.5
3Monitor 24179.0

Cuatro causas que conviene separar

CausaQué comprobarSiguiente paso
Nombre mal escrito o columna inexistenteCompara el SQL con el esquema real de la tabla.Corrige el identificador o la migración que debía crear/renombrar la columna.
Tabla o alias equivocadoRevisa qué tablas aparecen en FROM/JOIN y qué alias les asignaste.Califica la columna con el alias correcto.
Alias de salida usado demasiado prontoUn alias definido en SELECT no está disponible en todas las cláusulas.Si el problema está en WHERE, usa la guía Alias no funciona en WHERE.
Texto escrito como si fuera un identificadorRevisa literales de texto y comillas.Para valores de texto, usa la sintaxis de literal correspondiente; en el SQL portable del curso, comillas simples.

El mensaje cambia entre motores

No construyas una solución alrededor de una frase exacta. Los códigos y mensajes ayudan a reconocer el síntoma, pero después debes revisar el esquema y el alcance de nombres de tu consulta.

MotorReferencia útilMatiz
PostgreSQL42703 · undefined_columnLos identificadores sin comillas se pliegan a minúsculas; los identificadores delimitados conservan su forma y distinguen mayúsculas/minúsculas.
MySQL 8.41054 · Unknown columnEl propio mensaje añade el contexto, por ejemplo field list o where clause, lo que ayuda a localizar dónde no pudo resolverse el nombre.
SQL Server207 · Invalid column nameMicrosoft documenta entre las causas un nombre mal escrito, una columna inexistente, sensibilidad a mayúsculas según la intercalación y ciertos usos incorrectos de aliases.
SQLiteEl ejemplo local devuelve no such columnEl wording se verifica aquí sobre la base educativa local; no lo uses como contrato universal entre versiones o herramientas.

Método de diagnóstico

  1. Reduce la consulta: conserva el SELECT, FROM y la referencia que falla.
  2. Confirma el esquema real: comprueba que la columna existe en ese entorno y no solo en documentación, otra base o una migración pendiente.
  3. Revisa el origen: si hay varios JOIN, identifica qué tabla debe aportar el dato y usa su alias.
  4. Revisa el alcance: una columna de una subconsulta, CTE o alias de salida no está disponible automáticamente fuera de su ámbito.
  5. Revisa comillas y mayúsculas: distingue un literal de texto de un identificador y, si usas nombres delimitados, respeta las reglas del motor.

Error frecuente: crear una columna nueva para que el error desaparezca

No modifiques el esquema hasta saber qué dato querías consultar. Si escribiste precio_final pero la columna correcta era precio, añadir precio_final solo crea dos fuentes de verdad. Primero determina si el problema está en el SQL, en el despliegue de una migración o en el modelo de datos.

Práctica correctiva

Básica · resolución de nombres

Corrige una columna que no existe

La consulta intenta mostrar el nombre y la ciudad de los clientes 1, 2 y 3, pero usa ciudad_cliente, que no existe en clientes. Corrígela sin cambiar el esquema.

Qué debes recordar

  • Una columna inexistente es un problema de resolución de nombres: confirma primero esquema y alcance.
  • Un nombre ambiguo y un nombre inexistente son problemas distintos.
  • Los aliases, subconsultas y CTE crean ámbitos; no todos los nombres están visibles en todas las cláusulas.
  • El mensaje varía por motor, así que diagnostica la causa en lugar de memorizar una frase.

Conceptos relacionados

Fuentes técnicas consultadas