SQL Comentários
Daqui a seis meses, a Ana vai abrir o arquivo do relatório de estoque e se perguntar: "por que eu filtrei estoque = 0 aqui?". Um comentário é um bilhete que você deixa dentro do SQL para quem vier depois (inclusive você mesmo). O banco ignora o comentário por completo: ele não muda o resultado, só ajuda as pessoas a entender a consulta. Nesta aula você vai ver os dois jeitos de comentar, -- e /* */, e o truque de "desligar" uma parte da consulta sem apagá-la.
- O comentário de linha, que começa com
--e vai até o fim da linha. - O comentário de bloco, entre
/*e*/, que pode ocupar várias linhas. - Como desligar uma condição ou uma coluna para testar, sem apagar nada.
- O que escrever num comentário (e o que não vale a pena escrever).
- As armadilhas: o comentário que engole o
;, o--no meio de uma conta e o comentário dentro de outro. - As diferenças do MySQL (
#e o espaço depois do--) e do PostgreSQL.
Os exemplos usam o banco da Loja Aurora, e cada quadro "Resultado" vem do SQLite de verdade, rodando no seu navegador.
A ideia: o bilhete na receita
Na receita de bolo da avó da Ana, alguém escreveu a lápis, na margem: "usar forma de 24 cm" e "na receita original eram 3 ovos". Quem faz o bolo lê a receita e as anotações; mas as anotações não são ingredientes nem passos, não entram no bolo. No SQL é igual: o banco lê a consulta e pula os comentários, como se fossem espaços em branco. A documentação do SQLite diz exatamente isso: o comentário é tratado como espaço em branco.
| Tipo | Começa com | Termina | Bom para |
|---|---|---|---|
| Comentário de linha | -- (dois hífens) | No fim da linha | Anotações curtas, no fim de uma linha ou numa linha sozinha |
| Comentário de bloco | /* | No próximo */ | Textos longos, de várias linhas; ou um pedaço no meio da linha |
1. O comentário de linha: --
-- Clientes do Piauí, para a campanha de outubro SELECT nome, cidade FROM clientes WHERE estado = 'PI'; -- 14 clientes
- -- Clientes do Piauí, para a campanha de outubro
- Uma linha inteira de comentário. Tudo do
--até o fim da linha é ignorado. - SELECT … WHERE estado = 'PI';
- A consulta de verdade, que o banco executa.
- -- 14 clientes
- Um comentário no fim de uma linha de código. O que vem antes do
--vale; o que vem depois, não.
O resultado é exatamente o mesmo que sem os comentários: os 14 clientes do Piauí. O banco nem "viu" as anotações.
O comentário de linha pode ficar no fim de qualquer linha, até no meio da consulta:
SELECT nome, preco -- o preço de catálogo FROM produtos WHERE categoria_id = 7; -- 7 = Alimentos
2. O comentário de bloco: /* … */
Para um texto mais longo, como o cabeçalho de um relatório, o comentário de bloco é mais confortável. Ele começa em /* e só termina no */, passando por quantas linhas forem precisas:
/* Relatório: produtos parados Autora: Ana Atualizado em outubro de 2026 */ SELECT nome, estoque FROM produtos WHERE estoque = 0;
Como ele tem começo e fim marcados, também pode ficar no meio de uma linha, coisa que o -- não consegue (o -- sempre vai até o fim da linha):
SELECT nome, /* cidade, */ estado FROM clientes WHERE vip = 1;
O cidade, ficou dentro do comentário, e o resultado veio só com nome e estado.
3. Desligando parte da consulta para testar
Esse é o uso que você mais vai fazer no dia a dia. A Ana está mexendo numa consulta e quer ver o que acontece sem o filtro, mas não quer apagá-lo (vai precisar dele de novo daqui a pouco). Ela "comenta" a linha:
SELECT nome, cidade FROM clientes -- WHERE estado = 'PI' ;
Vieram os 30 clientes: o WHERE virou comentário. Repare no truque: o ; ficou sozinho na linha de baixo. Se ele estivesse no fim da linha comentada, iria junto para dentro do comentário. (No editor do guia isso nem faria falta, porque o último comando pode ficar sem ;; mas, com mais de um comando, faz toda a diferença, como você vai ver em Quando dá errado.)
Para voltar o filtro, é só apagar os dois hífens. Muitos editores de código fazem isso com um atalho (em geral Ctrl + /): ele põe ou tira o -- da linha.
Experimente: sem apagar a linha do WHERE, transforme-a em comentário para a consulta trazer todos os 30 clientes. Cuidado com o ;.
SELECT nome, cidade, estado FROM clientes WHERE estado = 'PI';
SELECT nome, cidade, estado FROM clientes -- WHERE estado = 'PI' ;
O mesmo truque funciona com uma condição só: deixe cada condição numa linha, e comente a que quiser desligar.
SELECT nome, cidade FROM clientes WHERE estado = 'PI' -- AND vip = 1 AND cidade = 'Teresina';
Com o AND vip = 1 desligado, vieram os 10 clientes de Teresina, VIP ou não. Por isso muita gente escreve cada AND no começo de uma linha: fica fácil ligar e desligar.
4. O que vale a pena comentar
Um bom comentário explica o porquê, que o SQL não mostra. O quê, o próprio SQL já diz.
| Comentário | Ajuda? | Por quê |
|---|---|---|
-- seleciona nome e cidade | Não | Repete o que o SELECT nome, cidade já diz. |
-- 7 = Alimentos | Sim | O número 7 sozinho não diz nada; o comentário diz. |
-- frete 0 = frete grátis (promoção de 2024) | Sim | Explica uma regra da loja que não está no banco. |
-- estoque 0 inclui os descontinuados (ids 12 e 27) | Sim | Avisa quem vier depois de um detalhe que pode surpreender. |
| Cabeçalho com nome, autora e data | Sim, em arquivos | Num arquivo .sql guardado, conta de onde ele veio. |
Comentários num arquivo .sql
Fora do editor do guia, consultas costumam morar em arquivos .sql, e é lá que os comentários mais aparecem. A Ana guardou o relatório de parados num arquivo e rodou com o sqlite3 no terminal (você viu o terminal em O Terminal do SQLite):
$ cat parados.sql -- parados.sql: produtos sem estoque -- Autora: Ana, outubro de 2026 /* Mostra o nome e o preço de quem precisa de reposição */ SELECT nome, preco FROM produtos WHERE estoque = 0; -- os descontinuados $ sqlite3 loja.db < parados.sql Pen Drive 32GB|29.9 Carrinho de Fricção|18.6
O sqlite3 leu o arquivo inteiro, pulou os comentários e mostrou só o resultado da consulta.
5. Formas diferentes de comentar
-- 1) Uma linha inteira de comentário
SELECT nome FROM produtos; -- 2) No fim de uma linha
/* 3) Um bloco,
de várias linhas */
SELECT nome /* 4) no meio da linha */ FROM produtos;
| Situação | Qual usar |
|---|---|
| Anotação curta, de uma linha | -- |
| Cabeçalho de arquivo, explicação longa | /* … */ (ou várias linhas com --, o que é muito comum) |
Desligar uma linha inteira (um WHERE, um AND) | -- no começo da linha |
| Desligar um pedaço no meio da linha (uma coluna) | /* … */ |
| Desligar várias linhas de uma vez | /* … */ em volta delas, se dentro não houver outro /* */ |
| SQL que vai rodar também no MySQL | -- com um espaço depois (-- assim) |
Quando dá errado
A Ana anotou "papelaria" no fim da primeira consulta e, logo depois, escreveu a segunda:
SELECT nome FROM produtos WHERE categoria_id = 1 -- papelaria; SELECT nome FROM produtos WHERE categoria_id = 2;
A mensagem: near "SELECT": syntax error. O ; que encerrava a primeira consulta ficou depois do --, ou seja, dentro do comentário. Para o SQLite, a primeira consulta não terminou, e o segundo SELECT chegou no meio dela.
Como consertar: o ; vem antes do comentário: … categoria_id = 1; -- papelaria.
Missão: a caixa abaixo tem duas consultas, mas dá erro por causa de um comentário. Conserte sem apagar o comentário, para que as duas rodem (a segunda mostra os 7 Eletrônicos).
SELECT nome FROM produtos WHERE categoria_id = 1 -- papelaria; SELECT nome FROM produtos WHERE categoria_id = 2;
SELECT nome FROM produtos WHERE categoria_id = 1; -- papelaria SELECT nome FROM produtos WHERE categoria_id = 2;
SELECT 10 - -2, 10 --2 ;
O que aconteceu: nenhum erro, mas as duas contas deram resultados diferentes: 12 e 10. Em 10 - -2, com espaço, é "10 menos menos 2" = 12. Em 10 --2, os dois hífens juntos começam um comentário, e o 2 sumiu: sobrou só o 10. (Repare também no cabeçalho da segunda coluna, que veio com o comentário dentro, o que leva ao próximo caso.)
Como evitar: para subtrair um número negativo, separe os sinais com espaço ou use parênteses: 10 - (-2).
SELECT nome, preco * estoque -- dinheiro parado FROM produtos WHERE categoria_id = 8;
O que aconteceu: o resultado está certo, mas o cabeçalho da conta saiu "preco * estoque -- dinheiro parado". Uma conta sem apelido ganha como nome o texto que você escreveu, e o SQLite pegou o comentário junto.
Como consertar: dê um apelido à conta (aula Apelidos (AS)): preco * estoque AS valor_parado -- dinheiro parado.
/* fora /* dentro */ ainda fora? */ SELECT 1;
A mensagem: near "ainda": syntax error. No SQLite, os comentários de bloco não se aninham: o comentário termina no primeiro */ que aparece. O "ainda fora? */" ficou de fora e foi lido como SQL. Isso acontece quando você tenta desligar, com /* */, um trecho que já tinha um comentário de bloco dentro.
Como consertar: para desligar um trecho que já tem /* */, use -- em cada linha.
# do MySQL
# comentário estilo MySQL SELECT 1;
A mensagem: unrecognized token: "#", "símbolo desconhecido: #". O # é comentário só no MySQL (e no MariaDB). No SQLite e no padrão SQL, não.
Como consertar: use -- ou /* */, que funcionam em todos.
Curiosidade que confunde: o programa sqlite3, do terminal, ignora sozinho as linhas que começam com # quando lê os comandos linha por linha (digitados ou vindos de um arquivo com <). Isso é coisa do programa, não do SQL: o mesmo # num comando passado de outro jeito, no editor do guia ou num programa que use o SQLite, dá o erro de cima. Veja no terminal da Ana:
$ printf '# comentário estilo MySQL\nSELECT 1;\n' > cerquilha.sql $ sqlite3 loja.db < cerquilha.sql 1 $ sqlite3 loja.db "SELECT 1; # no fim" 1 Error: in prepare, unrecognized token: "#" # no fim ^--- error here
Lido do arquivo, linha por linha, o # no começo da linha passou. Passado como texto do comando, o mesmo # deu erro (o 1 é da primeira consulta, que rodou antes de o sqlite3 chegar no #). Não conte com o #.
SELECT '-- isto é texto', '/* isto também */';
O que aconteceu: dentro de aspas simples, -- e /* são caracteres comuns de um texto. O SQLite devolveu os dois textos exatamente como foram escritos. Isso é bom: um produto pode ter "--" no nome sem quebrar nada.
- MySQL e MariaDB: o
--só vira comentário se vier seguido de um espaço (ou tab, ou fim de linha); a documentação do MySQL diz que isso difere um pouco do padrão. No SQLite,--sem espaçojá é comentário. O MySQL também aceita#como comentário de linha, e tem um comentário especial,/*! … */, cujo conteúdo o MySQL executa (os outros bancos ignoram). - PostgreSQL: os comentários de bloco se aninham, como manda o padrão SQL:
/* fora /* dentro */ ainda fora */é um comentário só. Assim dá para desligar um trecho que já tinha comentários. No SQLite (e no MySQL), não.
Ilustrativo (MySQL; não roda no SQLite):
# comentário de linha só do MySQL SELECT nome FROM produtos; -- comentário com espaço: funciona em todos SELECT 10 --2; -- no MySQL, sem espaço, isto é 10 - (-2) = 12
A regra que funciona em todos os bancos: -- seguido de espaço, ou /* */ sem nada aninhado dentro.
O -- tem um papel famoso num ataque chamado SQL injection: um invasor digita, num formulário, um texto terminado em -- para "comentar" o resto da consulta do programa. Você vai entender como isso funciona, e como se proteger, em SQL Injection.
Referência rápida
| Escrita | O que faz |
|---|---|
-- texto | Comentário até o fim da linha |
SELECT …; -- texto | Comentário depois do código (o ; antes do --) |
/* texto */ | Comentário de bloco, de uma ou várias linhas |
SELECT a, /* b, */ c | Desliga um pedaço no meio da linha |
-- WHERE … | Desliga uma linha inteira para testar |
'-- texto' | Entre aspas, é texto, não comentário |
| Mensagem do SQLite | Quer dizer |
|---|---|
near "SELECT": syntax error | O ; ficou dentro de um comentário, e duas consultas se juntaram |
near "ainda": syntax error | Comentário de bloco aninhado: ele acabou no primeiro */ |
unrecognized token: "#" | O # do MySQL não é comentário no SQLite |
Exercícios
1. O comentário de linha
Complete com os dois caracteres que começam um comentário de linha:
2. O fim do bloco
Complete o fechamento do comentário de bloco:
3. O que o banco faz com um comentário?
4. Por que SELECT nome FROM produtos -- todos; seguido, na linha de baixo, de outro SELECT dá erro?
5. Quanto o SQLite responde para SELECT 10 --2;?
Missão final: desligue só uma coluna
Missão: a Ana quer ver os produtos da Papelaria (categoria 1) só com nome e preco, mas não quer apagar a coluna estoque do código, porque vai precisar dela depois. Desligue só a coluna estoque com um comentário de bloco.
SELECT nome, estoque, preco FROM produtos WHERE categoria_id = 1;
SELECT nome, /* estoque, */ preco FROM produtos WHERE categoria_id = 1;
Resumo
- Comentários são anotações para pessoas; o banco os trata como espaço em branco e eles não mudam o resultado.
--comenta até o fim da linha;/* … */comenta um bloco, de uma ou várias linhas, e pode ficar no meio de uma linha.- Use comentários para desligar uma linha ou uma coluna enquanto testa, sem apagar nada.
- Comente o porquê (uma regra da loja, um número mágico), não o que o SQL já diz.
- O
;vem antes do--; senão, ele vira comentário e as consultas se juntam (near "SELECT": syntax error). - No SQLite, comentários de bloco não se aninham; dentro de aspas,
--é texto. Para funcionar em todos os bancos, escreva--seguido de espaço; o#é só do MySQL.