Erro 1054 MySQL: Unknown column, como resolver
Entenda o erro 1054 do MySQL, confira as colunas reais da tabela e veja as causas: nome errado, alias no WHERE, aspas e coluna que ainda não existe.
Por Redação Eleven Host · @robson.direitodigital · 31 de outubro de 2026 · 9 min de leitura

Capa da Redação Eleven Host para o guia: Erro 1054 MySQL: Unknown column, como resolver Arte: Eleven Host
O erro 1054 MySQL, Unknown column, quer dizer que a consulta cita uma coluna que o MySQL não encontra naquela tabela ou naquele trecho da consulta. Entre as causas possíveis estão nome errado, coluna que ainda não existe ou uso num lugar onde ela não vale.
Este guia mostra como ler a mensagem e como conferir as colunas reais da tabela. Depois, as causas: nome digitado errado, alias no WHERE, aspas duplas no lugar de crase, coluna que falta depois de atualizar o site e coluna de outra tabela sem JOIN. No fim, a diferença para os erros 1146, 1049 e 1064. Os fatos sobre o erro, o alias, as aspas e os comandos vêm do manual do MySQL 8.4; as causas 4 e 5 vêm da prática, e os nomes dos exemplos são fictícios.
O que a mensagem diz
Na referência de erros do servidor do MySQL 8.4, o erro 1054 tem o símbolo ER_BAD_FIELD_ERROR, o SQLSTATE 42S22 e este formato de mensagem:
Unknown column '%s' in '%s'
A referência traz só o número, o símbolo, o SQLSTATE e a mensagem, sem explicação adicional. Pelo formato, o primeiro %s é o nome da coluna que o MySQL não achou, e o segundo é o lugar da consulta em que o nome apareceu. Um exemplo de como a mensagem pode aparecer, só para ilustrar:
ERROR 1054 (42S22): Unknown column 'nome_cliente' in 'field list'
Aqui, nome_cliente é um nome fictício, e field list é um exemplo de lugar da consulta. Na mensagem do seu erro, o trecho entre aspas depende da consulta que falhou.
Leia os dois pedaços da mensagem: o primeiro diz qual nome o MySQL não achou, e o segundo diz em que parte da consulta ele estava.
Primeiro passo: ver as colunas reais da tabela
Antes de mexer na consulta, veja como a tabela está de fato. O manual traz estes comandos para conferir a estrutura:
SHOW COLUMNS FROM minha_tabela;
SHOW COLUMNS FROM minha_tabela FROM meu_banco;
SHOW COLUMNS FROM meu_banco.minha_tabela;
DESCRIBE minha_tabela;
SHOW CREATE TABLE minha_tabela\G
Na página do EXPLAIN, o manual diz que DESCRIBE é um atalho para SHOW COLUMNS. Já o SHOW CREATE TABLE mostra o comando CREATE TABLE que cria a tabela indicada.
Outra opção é perguntar ao information_schema, cuja tabela COLUMNS traz informação sobre as colunas das tabelas. Uma consulta montada com as colunas e filtros que o manual cita:
SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'minha_tabela' AND table_schema = 'meu_banco';
Compare a lista com o nome citado na mensagem. Se a coluna está lá, o problema pode estar em onde a consulta a usa. Se não está, pode ser o nome ou a estrutura da tabela. Se o MySQL ainda não está instalado, o guia Instalar MySQL no Ubuntu: passo a passo na VPS mostra a instalação.
Causa 1: nome da coluna digitado errado
Letra trocada, plural no lugar do singular, underscore faltando: vale descartar esta causa primeiro. Compare o nome da mensagem, letra por letra, com a lista que o SHOW COLUMNS mostrou.
Um ponto sobre maiúsculas: segundo o manual, os nomes de coluna não diferenciam maiúsculas de minúsculas em nenhuma plataforma, nem os aliases de coluna. Então escrever Nome no lugar de nome não explica o 1054. Os nomes de tabelas e bancos são outro assunto: segundo o manual, não diferenciam no Windows e diferenciam na maior parte dos Unix, e o ajuste lower_case_table_names controla isso (no Unix, o padrão é 0).
Causa 2: alias no WHERE
O manual diz que o SQL padrão não permite referências a aliases de coluna numa cláusula WHERE, porque, quando o WHERE é avaliado, o valor da coluna pode ainda não ter sido determinado. O exemplo ilegal da documentação é este:
SELECT id, COUNT(*) AS cnt FROM tbl_name
WHERE cnt > 0 GROUP BY id;
O alias cnt não pode ser usado no WHERE. O manual não cita o código do erro nesse ponto; a ligação com o 1054 é dedução nossa, e a consulta pode falhar com Unknown column. O manual diz que você pode usar o alias em GROUP BY, ORDER BY ou HAVING. Um exemplo válido, da própria página:
SELECT id, COUNT(*) AS cnt FROM tbl_name
GROUP BY id HAVING cnt > 0;
Por orientação nossa, e não do manual, outra saída é repetir a expressão no WHERE, em vez do alias. Quando o alias vem entre aspas, o manual avisa que a referência deve usar a aspa de identificador (a crase), senão o texto é tratado como uma string. A referência GROUP BY `a` funciona, enquanto GROUP BY 'a' agrupa pela string literal 'a' e não funciona como esperado.
Quer conhecer o banco de dados na nuvem 11SQL? 11SQL Mini a partir de R$ 9,90/mês; confira na loja o que cada plano inclui. Conhecer o 11SQL
Causa 3: aspas duplas no lugar de crase
No MySQL, o caractere de aspas de identificador é a crase (`). Já as aspas simples e as duplas delimitam strings, segundo a página de literais do manual. Então, por padrão, "nome" com aspas duplas é um texto, e não uma coluna. Para escrever o nome de uma coluna que precisa de aspas, use a crase. Um exemplo do manual:
SELECT * FROM `select` WHERE `select`.id > 100;
Há uma exceção que gera o 1054 de um jeito traiçoeiro: o modo ANSI_QUOTES. O manual diz que esse modo faz o servidor interpretar strings entre aspas duplas como identificadores e que, com ele ligado, os literais de texto devem ficar entre aspas simples. Pela leitura dessas frases, um comando como este passa a comparar com uma coluna, e não com um texto:
SELECT * FROM minha_tabela WHERE status = "ativo";
Com ANSI_QUOTES ligado, o MySQL procura uma coluna chamada ativo e pode devolver o 1054. A correção é trocar por aspas simples: status = 'ativo'. A documentação mostra SET sql_mode='ANSI_QUOTES'; como a forma de ligar o modo.
Causa 4: a coluna ainda não existe depois de atualizar o site
Você atualizou o aplicativo ou o plugin, e o código novo passou a consultar uma coluna que o banco ainda não tem. Isso pode acontecer quando a atualização do banco não rodou, ou rodou só em parte. O primeiro passo é conferir a estrutura com SHOW COLUMNS e comparar com o que o aplicativo espera.
Por orientação nossa, o caminho é terminar a atualização pelo próprio aplicativo, seguindo o passo de atualização do banco que a documentação dele indicar. Criar a coluna à mão só faz sentido se a documentação do aplicativo mostrar qual coluna é essa. Antes de alterar a tabela, faça um backup do banco, porque o ALTER TABLE muda a estrutura da tabela.
A sintaxe do manual para adicionar uma coluna é ADD [COLUMN] col_name column_definition [FIRST | AFTER col_name]. Sem FIRST ou AFTER, a coluna entra por último. O exemplo da documentação adiciona uma coluna do tipo TIMESTAMP chamada d:
ALTER TABLE t2 ADD d TIMESTAMP;
Use esse formato só como modelo, trocando pelos nomes e tipos que a documentação do seu aplicativo indicar.
Causa 5: coluna de outra tabela, sem JOIN
Este caso vem da prática, e não de uma página do manual: pode acontecer de a consulta citar uma coluna que existe, mas em outra tabela que não entrou no FROM. Exemplo ilustrativo, com nomes fictícios:
SELECT pedidos.id, clientes.nome FROM pedidos;
A coluna nome pertence à tabela clientes, mas só pedidos está no FROM. O MySQL não acha clientes.nome e pode responder com o 1054. A correção é incluir a tabela com um JOIN:
SELECT pedidos.id, clientes.nome FROM pedidos JOIN clientes ON pedidos.cliente_id = clientes.id;
Se a sintaxe do JOIN acabar gerando outro erro, vale conferir o guia Erro 1064 MySQL: erro de sintaxe SQL, como resolver.
Erro 1054 x 1146 x 1049 x 1064
Quatro erros parecem vizinhos, mas apontam para lugares diferentes:
- 1054: a coluna citada não foi encontrada.
- 1146: a tabela não existe. O guia Erro 1146 MySQL: tabela não existe, como resolver trata esse caso.
- 1049: o banco de dados não existe. Veja o Erro 1049 MySQL: Unknown database, como resolver.
- 1064: a sintaxe do comando tem erro, o comando foi escrito de um jeito que o MySQL não entende.
Uma regra simples para não confundir: o 1049 fala do banco, o 1146 fala da tabela e o 1054 fala da coluna. Se a mensagem for de sintaxe, veja o 1064.
Checklist do erro 1054
- Leia a mensagem: pelo formato, o primeiro nome entre aspas é a coluna que o MySQL não achou, e o segundo é o lugar da consulta.
- Rode
SHOW COLUMNSouDESCRIBEna tabela e compare com o nome da mensagem. - Confira erros de digitação, plural e underscore (maiúsculas não importam em coluna).
- Procure alias no
WHERE; mova paraHAVINGou repita a expressão. - Troque aspas duplas por aspas simples nos textos e por crase nos nomes de colunas.
- Veja se o modo
ANSI_QUOTESestá ligado. - Depois de atualizar o aplicativo, confira se a migração do banco terminou; faça backup antes de um
ALTER TABLE. - Veja se a coluna pertence a outra tabela e falta um
JOIN.
VPS a partir de R$ 17,00/mês no Plano Bronze; confira na loja o que cada plano inclui. Quer conhecer a VPS da Eleven Host? Ver os planos de VPS
Perguntas frequentes
O que significa o erro 1054 no MySQL?
Significa Unknown column: a consulta cita uma coluna que o MySQL não encontra naquela tabela ou naquele trecho da consulta. O símbolo é ER_BAD_FIELD_ERROR e o SQLSTATE é 42S22.
Posso usar alias no WHERE?
Não. O manual diz que o SQL padrão não permite aliases de coluna no WHERE. Use o alias em GROUP BY, ORDER BY ou HAVING.
Maiúsculas e minúsculas causam o erro 1054?
Não no nome da coluna. Segundo o manual, nomes de coluna não diferenciam maiúsculas de minúsculas em nenhuma plataforma.
Como ver as colunas de uma tabela?
Use SHOW COLUMNS FROM minha_tabela; ou DESCRIBE minha_tabela;. Para ver o comando de criação da tabela, use SHOW CREATE TABLE minha_tabela;.
Qual a diferença entre os erros 1054 e 1146?
O 1054 diz que a coluna não foi encontrada. O 1146 diz que a tabela não existe.