Não existe lista definitiva de “SQL necessário para o trabalho” — mas existe um conjunto de comandos que aparece em quase toda consulta real. Dominar esses 10 significa conseguir resolver a grande maioria dos problemas do dia a dia de um analista de dados.
1. SELECT e FROM
A base de tudo. SELECT define quais colunas você quer trazer; FROM define de qual tabela.
SELECT nome, email, data_cadastro
FROM clientes;
Evite SELECT * em produção. Trazer apenas as colunas necessárias melhora performance e deixa o código mais legível.
2. WHERE
Filtra as linhas que atendem a uma condição. É um dos comandos mais usados e mais poderosos do SQL.
SELECT nome, valor_pedido
FROM pedidos
WHERE status = 'entregue'
AND valor_pedido > 500;
Combine com AND, OR, IN, BETWEEN, LIKE e IS NULL para filtros mais precisos.
3. GROUP BY
Agrupa linhas com valores iguais em uma coluna para aplicar funções de agregação. Essencial para qualquer análise de resumo.
SELECT categoria, COUNT(*) AS total_produtos, AVG(preco) AS preco_medio
FROM produtos
GROUP BY categoria;
Sempre que você usar COUNT(), SUM(), AVG(), MIN() ou MAX() junto com outras colunas, você vai precisar de GROUP BY.
4. ORDER BY
Ordena o resultado por uma ou mais colunas. ASC para crescente (padrão), DESC para decrescente.
SELECT produto, total_vendas
FROM resumo_vendas
ORDER BY total_vendas DESC
LIMIT 10;
Combinado com LIMIT, é perfeito para rankings e top N.
5. JOIN (INNER JOIN e LEFT JOIN)
Une dados de duas ou mais tabelas com base em uma coluna em comum. É o comando que mais intimida iniciantes — e o mais importante de dominar.
-- INNER JOIN: só traz linhas que têm correspondência nas duas tabelas
SELECT p.id_pedido, c.nome, p.valor_total
FROM pedidos p
INNER JOIN clientes c ON p.id_cliente = c.id_cliente;
-- LEFT JOIN: traz tudo da tabela da esquerda, mesmo sem correspondência na direita
SELECT c.nome, COUNT(p.id_pedido) AS total_pedidos
FROM clientes c
LEFT JOIN pedidos p ON c.id_cliente = p.id_cliente
GROUP BY c.nome;
Use INNER JOIN quando precisa que os dados existam nas duas tabelas. Use LEFT JOIN quando quer incluir todos os registros da tabela principal, mesmo os sem correspondência.
6. HAVING
Filtra grupos após o GROUP BY. A diferença com WHERE é que WHERE filtra linhas antes do agrupamento; HAVING filtra grupos depois.
SELECT vendedor, SUM(valor) AS total_vendas
FROM vendas
GROUP BY vendedor
HAVING SUM(valor) > 10000;
Regra prática: use WHERE para filtrar linhas individuais, use HAVING para filtrar resultados de agregação.
7. CASE WHEN
Cria colunas condicionais — equivalente ao SE() do Excel, mas dentro de uma consulta SQL.
SELECT nome,
salario,
CASE
WHEN salario < 3000 THEN 'Junior'
WHEN salario BETWEEN 3000 AND 7000 THEN 'Pleno'
ELSE 'Senior'
END AS nivel
FROM funcionarios;
Muito usado para segmentação, categorização e criação de flags em análises.
8. Subquery (subconsulta)
Uma consulta dentro de outra. Permite usar o resultado de uma query como fonte de dados ou filtro para outra.
SELECT nome, salario
FROM funcionarios
WHERE salario > (SELECT AVG(salario) FROM funcionarios);
Subqueries ficam dentro de WHERE, FROM ou SELECT. Quando a subquery fica no FROM, ela funciona como uma tabela temporária.
9. WITH (CTE — Common Table Expression)
Uma forma de nomear subqueries para reutilização dentro de uma mesma consulta. Torna queries complexas muito mais legíveis.
WITH vendas_mensais AS (
SELECT
DATE_TRUNC('month', data_pedido) AS mes,
SUM(valor) AS total
FROM pedidos
GROUP BY 1
)
SELECT mes, total,
total - LAG(total) OVER (ORDER BY mes) AS variacao
FROM vendas_mensais;
CTEs são preferíveis a subqueries aninhadas quando a lógica fica complexa. Mais fácil de ler, testar e manter.
10. Funções de janela (Window Functions)
Calculam valores sobre um conjunto de linhas relacionadas sem colapsar o resultado como o GROUP BY faz. São o salto de nível que separa analistas júnior de pleno.
SELECT
nome,
departamento,
salario,
RANK() OVER (PARTITION BY departamento ORDER BY salario DESC) AS ranking_no_dept,
AVG(salario) OVER (PARTITION BY departamento) AS media_do_dept
FROM funcionarios;
As funções mais usadas são ROW_NUMBER(), RANK(), DENSE_RANK(), LAG(), LEAD() e SUM() OVER().
Como esses comandos aparecem nas entrevistas
A maioria dos testes técnicos de analista de dados no Brasil cobre exatamente esses 10 comandos. Perguntas típicas incluem:
- “Escreva uma query que retorne os 5 produtos mais vendidos por categoria”
- “Como você encontraria clientes que compraram em janeiro mas não em fevereiro?”
- “Mostre o salário de cada funcionário e a média do seu departamento na mesma linha”
Cada uma dessas perguntas é respondida com alguma combinação dos comandos acima.
Perguntas frequentes
Qual é o comando SQL mais importante para analistas de dados?
SELECT combinado com JOIN e GROUP BY forma o núcleo de praticamente toda análise de dados. Se você precisasse escolher apenas um conjunto para dominar primeiro, seria esse trio. Ele cobre a maioria dos casos reais de extração e resumo de dados.
Preciso memorizar todos os comandos SQL? Não. O objetivo é entender a lógica de cada comando e saber quando usá-lo. Sintaxes específicas — especialmente de funções menos usadas — podem ser consultadas. Nenhum analista profissional escreve SQL de memória sem nunca consultar documentação.
Qual a diferença entre WHERE e HAVING?
WHERE filtra linhas individuais antes do agrupamento acontecer. HAVING filtra grupos depois que o GROUP BY foi aplicado. Regra prática: se você está filtrando com base no resultado de uma função de agregação (SUM, COUNT, AVG), use HAVING. Para qualquer outro filtro, use WHERE.
CTEs são melhores do que subqueries?
Para queries complexas, sim. CTEs (WITH ... AS) tornam o código mais legível e fácil de depurar porque você nomeia cada etapa da lógica. Subqueries aninhadas ficam difíceis de ler quando há mais de dois níveis. Para queries simples com um único passo auxiliar, subqueries funcionam bem.
Window functions são cobradas em entrevistas técnicas?
Sim, com frequência. Questões que pedem ranking dentro de grupos, cálculos comparando a linha atual com a anterior (LAG) ou com a próxima (LEAD), ou médias móveis são muito comuns em entrevistas de analista pleno e sênior. É um dos tópicos que mais diferenciam candidatos no mercado brasileiro em 2026.
Devo aprender SQL padrão ou uma versão específica (PostgreSQL, BigQuery, SQL Server)? Aprenda SQL padrão primeiro. A lógica e os comandos principais são idênticos em todos os bancos. As diferenças específicas de cada banco (funções de data, dialetos de window functions, sintaxe de CTE) são fáceis de adaptar depois que a base está sólida.
O próximo passo
Conhecer os comandos é o começo. Saber aplicá-los em cenários reais, com tabelas relacionadas e dados sujos, é o que o mercado exige. O curso SQL do Zero ao Avançado da Blast Group cobre todos esses comandos com exercícios baseados em situações reais do mercado brasileiro.
Domine esses 10 — o restante vem naturalmente.
