Pessoa analisando dados em um tablet e computador
Uma consulta pode escolher colunas, filtrar linhas, ordenar resultados e limitar a quantidade exibida. Crédito da foto.
Compartilhe este conteúdo

Consultar bem não significa trazer toda a tabela e procurar visualmente. Em SQL, a consulta descreve quais colunas e linhas devem compor o resultado; WHERE filtra, ORDER BY ordena a apresentação e LIMIT restringe a quantidade retornada. Para os exemplos, imagine uma tabela produtos com id, nome, categoria, preço, estoque e ativo.

WHERE escolhe quais linhas participam

SELECT nome, preco
FROM produtos
WHERE categoria = 'Higiene';

Textos aparecem entre aspas simples. Números não precisam delas. Operadores comuns incluem =, <>, >, <, >= e <=.

SELECT nome, estoque
FROM produtos
WHERE estoque < 10;

AND, OR e parênteses

AND exige que todas as condições sejam verdadeiras. OR aceita qualquer uma. Quando os dois aparecem, use parênteses para tornar a intenção explícita.

SELECT nome, categoria, preco
FROM produtos
WHERE ativo = true
AND (categoria = 'Higiene' OR categoria = 'Beleza');
Cuidado: esquecer o WHERE em UPDATE ou DELETE pode alterar todas as linhas. Primeiro execute um SELECT com a mesma condição e confirme o conjunto afetado.

LIKE e ILIKE

LIKE procura padrões. O símbolo % representa qualquer sequência de caracteres. No PostgreSQL, ILIKE faz comparação sem diferenciar maiúsculas e minúsculas.

SELECT nome
FROM produtos
WHERE nome ILIKE '%shampoo%';

Esse padrão encontra “shampoo” em qualquer posição do nome. Já 'shampoo%' exige que o texto comece assim.

ORDER BY organiza a apresentação

SELECT nome, preco
FROM produtos
WHERE ativo = true
ORDER BY preco ASC;

ASC ordena de forma crescente e é o padrão. DESC inverte. É possível usar mais de uma coluna para desempatar.

SELECT nome, categoria, preco
FROM produtos
ORDER BY categoria ASC, preco DESC;

A ordenação ocorre depois do filtro lógico. Ela não altera os dados armazenados; muda apenas a apresentação do resultado.

LIMIT controla a quantidade

SELECT nome, estoque
FROM produtos
ORDER BY estoque ASC, id ASC
LIMIT 5;

Essa consulta mostra cinco itens com menor estoque. Usar LIMIT sem ORDER BY não garante quais linhas serão escolhidas. Inclua um critério estável, como o id, para desempatar.

Valores nulos

NULL representa ausência de valor e não é comparado com =. Use IS NULL ou IS NOT NULL.

SELECT nome
FROM produtos
WHERE categoria IS NULL;

Desafio prático

Escreva uma consulta que mostre nome, categoria e preço dos produtos ativos com estoque maior que zero, cujo nome contenha “óleo”, ordenados do maior preço para o menor, exibindo apenas os três primeiros. Depois explique a função de cada cláusula.

Laboratório: transforme uma pergunta em consulta

Em vez de começar escrevendo palavras-chave SQL, formule primeiro a pergunta que o resultado precisa responder. Use uma tabela produtos com as colunas id, nome, categoria, preco e estoque. A pergunta “quais são os três produtos de informática mais baratos que ainda têm estoque?” se divide em quatro decisões verificáveis:

  1. a origem é a tabela produtos;
  2. a seleção exige categoria = 'Informática' e estoque > 0;
  3. o menor preço deve aparecer primeiro;
  4. o resultado precisa conter somente três linhas.
SELECT id, nome, preco, estoque
FROM produtos
WHERE categoria = 'Informática'
  AND estoque > 0
ORDER BY preco ASC, id ASC
LIMIT 3;

O segundo critério de ordenação, id ASC, torna o resultado previsível quando dois produtos têm o mesmo preço. Sem ele, o banco pode devolver empates em ordens diferentes. Troque depois ASC por DESC, retire uma condição e aumente o limite. Antes de executar, anote o que você espera que mude; depois compare com o resultado.

Teste de compreensão

Crie uma consulta para encontrar até cinco produtos com estoque abaixo de 10, ordenados do menor para o maior estoque e, em caso de empate, pelo nome. Confira separadamente o filtro, a ordenação e o limite. Em seguida, avance para SQL JOIN e combine os produtos com outra tabela.

Caso completo: transformar uma pergunta em SQL

Pedido: “Mostre os cinco produtos ativos da categoria Papelaria com estoque abaixo de 10, do menor estoque para o maior; em empate, organize pelo nome”. Antes do código, destaque cada regra: tabela, filtros, ordenação e quantidade.

SELECT id, nome, estoque
FROM produtos
WHERE ativo = true
  AND categoria = 'Papelaria'
  AND estoque < 10
ORDER BY estoque ASC, nome ASC
LIMIT 5;

O resultado não significa “os cinco primeiros cadastrados”. O WHERE reduz as linhas, o ORDER BY define a prioridade e somente então o LIMIT corta o conjunto. Sem ordenação, não existe garantia útil de quais cinco linhas aparecerão.

Teste condições de fronteira e valores nulos

DadoEntra no resultado?Motivo
Estoque 9, ativo, PapelariaSimSatisfaz os três filtros
Estoque 10NãoA condição usa < 10
Estoque NULLNãoComparação com NULL não resulta em verdadeiro
Estoque 3, inativoNãoFalha no filtro de ativo

A documentação do PostgreSQL descreve o WHERE como uma condição booleana aplicada às linhas da tabela derivada. Consulte as expressões de tabela na documentação oficial.

Especificação antes da consulta

Escreva três perguntas de negócio e, para cada uma, marque: colunas exibidas, filtros, direção de ordenação, critério de desempate e limite. Depois crie dados que ficam exatamente dentro e fora de cada condição e confira se a saída corresponde à especificação.

Perguntas frequentes

ORDER BY, LIMIT e LIKE só podem ser usados no SELECT?

ORDER BY e LIMIT são mais comuns no SELECT, mas o suporte em outros comandos varia conforme o banco. LIKE é uma condição e pode aparecer onde expressões de filtro forem aceitas. Consulte a documentação do SGBD.

Posso usar maior e menor com datas?

Sim, desde que a coluna tenha tipo de data ou horário e o valor seja fornecido em formato aceito pelo banco.

Referências bibliográficas

Obras reconhecidas que fundamentam e aprofundam os conceitos apresentados neste artigo.

  1. BEAULIEU, Alan. Learning SQL . 3. ed. O’Reilly Media, 2020.
  2. ELMASRI, Ramez; NAVATHE, Shamkant B. Fundamentals of Database Systems . 7. ed. Pearson, 2016.

Consulte a bibliografia completa do Código em Sala.