Assim como em qualquer área da programação, trabalhar com SELECT inevitavelmente leva a erros. Até os devs mais experientes às vezes deixam passar bugs nas queries SQL. Hoje vamos analisar os erros típicos ao usar SELECT, por que eles acontecem e como evitar cair nessas ciladas.
SQL é uma linguagem que segue as regras de sintaxe à risca. Esqueceu ou colocou uma vírgula a mais, pulou um operador ou trocou a ordem das palavras — e o banco já levanta a "bandeira vermelha".
Palavras-chave esquecidas
O erro mais comum é simplesmente esquecer uma das palavras-chave obrigatórias. Por exemplo, tenta rodar esse comando aqui:
SELECT nome idade FROM estudantes;
Tá faltando alguma coisa, né? Aqui faltou a palavra-chave , entre os campos nome e idade. Bora corrigir:
SELECT nome, idade FROM estudantes;
O motivo desse tipo de erro é claro: ou você tá começando a escrever queries agora, ou tá com pressa. SQL não curte pressa!
Erros nos nomes das colunas e tabelas
Os comandos SQL são sensíveis aos nomes corretos das colunas e tabelas. Olha esse exemplo:
SELECT noem, idadde FROM estudants;
O banco olha pra isso e pensa: "que viagem é essa?": as colunas noem e idadde, assim como a tabela estudants, simplesmente não existem. Corrigindo:
SELECT nome, idade FROM estudantes;
Dica: Se não tiver certeza dos nomes, usa o comando \d nome_da_tabela no psql ou o interface do pgAdmin pra conferir a estrutura da tabela.
Aspas esquecidas
Nomes de colunas e tabelas que têm espaço ou outros caracteres especiais precisam estar entre aspas duplas. Exemplo:
SELECT "primeiro nome", idade FROM estudantes;
Se esquecer as aspas, o SQL não vai entender o que você quis dizer e vai dar erro.
Erros lógicos: quando tudo roda, mas não do jeito que você queria
Às vezes as queries rodam de boa, mas o resultado sai "estranho". Isso são erros lógicos. Eles são mais traiçoeiros porque o banco não vai te avisar que algo deu ruim.
- Uso errado dos operadores de comparação. Imagina que você quer pegar todos os estudantes com mais de 18 anos:
SELECT * FROM estudantes WHERE idade > 18;
Agora tenta uma query com outro operador:
SELECT * FROM estudantes WHERE idade = 18;
Essa query vai trazer só quem tem exatamente 18 anos. Se você queria pegar todo mundo com mais de 18, isso é um erro lógico.
Dica: Fica ligado nesses detalhes. Se tiver dúvida, começa com seleções pequenas (tipo usando LIMIT).
Erros ao combinar condições
Olha esse exemplo:
SELECT * FROM estudantes WHERE idade > 18 OR nota = 'A' AND cidade = 'Nova York';
Essa query pode acabar trazendo estudantes que nem moram em Nova York. Por quê? Porque a ordem dos operadores lógicos é assim: o SQL processa AND antes do OR. Bora reescrever com parênteses:
SELECT * FROM estudantes WHERE (idade > 18 OR nota = 'A') AND cidade = 'Nova York';
Agora sim, tá certo.
Falta de filtragem
Às vezes uma query tipo SELECT * FROM estudantes; devolve um monte de dados, mas você queria só estudantes de uma cidade específica. Solução? Adiciona filtros usando WHERE:
SELECT * FROM estudantes WHERE cidade = 'Nova York';
Problemas de performance
Quando as queries lidam com muitos dados, otimizar elas vira questão de sobrevivência. Bora ver os erros clássicos que detonam a performance.
Queries tipo SELECT * são práticas durante o desenvolvimento, mas na vida real elas detonam a performance. Se você só precisa de algumas colunas — especifica elas.
-- Ruim:
SELECT * FROM estudantes;
-- Bom:
SELECT nome, idade FROM estudantes;
Por que isso importa? SELECT * puxa todas as colunas, mesmo as que você nem vai usar. Isso aumenta o volume de dados trafegando.
Dicas práticas: como evitar erros
Dá pra deixar as queries SQL mais confiáveis seguindo umas dicas:
- Confere a sintaxe antes de rodar: usa IDE ou as dicas do
pgAdmin, que já mostram os erros antes. - Começa com seleções pequenas. Coloca
LIMIT 5ouLIMIT 10pra testar. - Usa comentários pra lembrar o que a query faz:
-- Pegar todos os estudantes com mais de 18 anos SELECT nome, idade FROM estudantes WHERE idade > 18; - Testa com dados diferentes pra garantir que a lógica tá certa.
- Não abusa do
SELECT *, principalmente em tabelas grandes.
Pegadinhas em entrevistas
Uma das tarefas clássicas em entrevistas de SQL é achar erros numa query. Tipo assim:
SELECT nome FROM funcionarios WHERE salario > 50000 ORDER BY departamento;
Pensa: essa query faz sentido lógico? Se tá usando ORDER BY, provavelmente a ordenação deveria ser pelo salário:
SELECT nome FROM funcionarios WHERE salario > 50000 ORDER BY salario DESC;
Trabalhar com SELECT é a base do SQL, e errar faz parte do começo. Mas com o tempo você vai escrever queries tão fácil quanto manda mensagem no zap, porque dev de verdade treina não só com gatos, mas também com bancos de dados. 😉
GO TO FULL VERSION