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.

Você vai aprender
  • 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.

TipoComeça comTerminaBom para
Comentário de linha-- (dois hífens)No fim da linhaAnotaçõ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árioAjuda?Por quê
-- seleciona nome e cidadeNãoRepete o que o SELECT nome, cidade já diz.
-- 7 = AlimentosSimO número 7 sozinho não diz nada; o comentário diz.
-- frete 0 = frete grátis (promoção de 2024)SimExplica uma regra da loja que não está no banco.
-- estoque 0 inclui os descontinuados (ids 12 e 27)SimAvisa quem vier depois de um detalhe que pode surpreender.
Cabeçalho com nome, autora e dataSim, em arquivosNum 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çãoQual 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

O comentário engoliu o ponto e vírgula

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;
Dois hífens no meio de uma conta
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).

O comentário foi parar no cabeçalho
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.

Comentário dentro de comentário
/* 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.

O # 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 #.

Dentro de aspas não é comentário
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.

Nos outros bancos
  • 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ço já é 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.

Comentários e segurança

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

EscritaO que faz
-- textoComentário até o fim da linha
SELECT …; -- textoComentário depois do código (o ; antes do --)
/* texto */Comentário de bloco, de uma ou várias linhas
SELECT a, /* b, */ cDesliga um pedaço no meio da linha
-- WHERE …Desliga uma linha inteira para testar
'-- texto'Entre aspas, é texto, não comentário
Mensagem do SQLiteQuer dizer
near "SELECT": syntax errorO ; ficou dentro de um comentário, e duas consultas se juntaram
near "ainda": syntax errorComentá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:

SELECT nome FROM clientes; lista para o cartão de Natal

2. O fim do bloco

Complete o fechamento do comentário de bloco:

/* Relatório mensal de vendas

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.