7th May 2025 4 minutos de leitura As consultas SQL mais inúteis (e o que você deve fazer em vez disso) LearnSQL.com.br Team práticas sql sql Índice 1. Selecionando tudo sem um propósito 2. Contando tudo sem filtragem 3. Ordenar por padrão quando a ordem não é importante 4. Classificação sem limite 5. Agrupamento sem rótulos significativos 6. Usando HAVING em vez de WHERE para filtrar linhas 7. Filtragem em colunas computadas sem indexação 8. Uso de subconsultas em vez de junções 9. Auto-união em vez de usar Funções de Janela (Window Functions) em SQL Escreva um SQL mais inteligente, não apenas um SQL válido Elas são executadas. Retornam dados. Mas são inúteis. Veja aqui o que não escrever em SQL e o que fazer em seu lugar. Algumas consultas SQL funcionam muito bem, mas isso não significa que estejam fazendo algo útil. Neste artigo, examinaremos exemplos reais de consultas SQL válidas, de aparência inofensiva e completamente inúteis. Elas desperdiçam recursos, ocultam insights ou simplesmente adicionam ruído. Para cada uma delas, você verá o que está errado e como escrever uma alternativa mais inteligente. Deseja praticar a redação de consultas melhores imediatamente? Experimente a trilhaTrilha de Práticas em SQL em LearnSQL.com.br - ela foi criada para ajudá-lo a transformar teoria em habilidade, com 12 cursos e mais de 1.000 exercícios interativos. Vamos limpar o lixo e escrever consultas que realmente realizem o trabalho. 1. Selecionando tudo sem um propósito A consulta: SELECT * FROM orders; Por que é inútil: extrai dados desnecessários, torna as consultas mais lentas e sobrecarrega o banco de dados. O que fazer em vez disso: especificar somente as colunas necessárias para melhorar o desempenho. Melhor consulta: SELECT order_id, customer_id, total_amount FROM orders; 2. Contando tudo sem filtragem A consulta: SELECT COUNT(*) FROM orders; Por que é inútil: geralmente retorna insights enganosos se não for filtrada. O que fazer em vez disso: usar as condições WHERE ou GROUP BY para obter maior precisão. Melhor consulta: SELECT COUNT(*) FROM orders WHERE status = 'completed'; 3. Ordenar por padrão quando a ordem não é importante A consulta: SELECT total_amount FROM orders ORDER BY customer_id; Por que é inútil: aumenta o tempo de processamento sem beneficiar a análise. O que fazer em vez disso: usar ORDER BY intencionalmente, por exemplo, para relatórios ou visualização. Melhor consulta: não use ORDER BY a menos que seja necessário; SELECT total_amount FROM orders; 4. Classificação sem limite Esta é semelhante à anterior. A consulta: SELECT order_id, customer_id, total_amount FROM orders ORDER BY created_at DESC; Por que é inútil: a classificação de grandes conjuntos de dados sem restrições é ineficiente. O que fazer em vez disso: se possível, use LIMIT ou TOP. Melhor consulta: SELECT order_id, customer_id, total_amount FROM orders ORDER BY created_at DESC LIMIT 10; 5. Agrupamento sem rótulos significativos A consulta: SELECT customer_id, COUNT(*) FROM orders GROUP BY customer_id; Por que ela é inútil: Os IDs sozinhos não fornecem contexto - os resultados são difíceis de interpretar e não são acionáveis. O que fazer em vez disso: certifique-se de incluir um rótulo significativo, como nome ou e-mail. Melhor consulta: SELECT o.customer_id, c.email, COUNT(*) AS total_orders FROM orders o JOIN customers c ON o.customer_id = c.id GROUP BY o.customer_id, c.email; 6. Usando HAVING em vez de WHERE para filtrar linhas A consulta: SELECT order_id, customer_id, total_amount FROM orders HAVING total_amount > 100; Por que é inútil: HAVING destina-se à filtragem agregada, não à filtragem de linhas. Embora funcione tecnicamente, isso fará com que o leitor da consulta não entenda sua intenção. O que fazer em vez disso: usar WHERE antes da agregação. Melhor consulta: SELECT order_id, customer_id, total_amount FROM orders WHERE total_amount > 100; 7. Filtragem em colunas computadas sem indexação A consulta: SELECT order_id, customer_id, total_amount FROM orders WHERE YEAR(created_at) = 2023; Por que é inútil: impede o uso de índices, causando varreduras de tabelas completas. O que fazer em vez disso: usar a filtragem baseada em intervalo para aproveitar os índices. Melhor consulta: SELECT order_id, customer_id, total_amount FROM orders WHERE created_at >= '2023-01-01' AND created_at < '2024-01-01'; 8. Uso de subconsultas em vez de junções A consulta: SELECT order_id, customer_id, total_amount FROM orders WHERE customer_id IN (SELECT customer_id FROM blacklisted_customers); Por que é inútil: pode levar a um desempenho lento em comparação com JOINs. O que fazer em vez disso: usar um INNER JOIN ou LEFT JOIN. Melhor consulta: SELECT o.order_id, o.customer_id, o.total_amount FROM orders o JOIN blacklisted_customers b ON o.customer_id = b.customer_id; 9. Auto-união em vez de usar Funções de Janela (Window Functions) em SQL A consulta: SELECT o1.customer_id, o1.order_id, COUNT(*) AS row_num FROM orders o1 JOIN orders o2 ON o1.customer_id = o2.customer_id AND o1.order_date >= o2.order_date GROUP BY o1.customer_id, o1.order_id; Por que é inútil: causa complexidade e duplicação desnecessárias. O que fazer em vez disso: usar as funções de janela pke ROW_NUMBER(), RANK(), ou LAG(). Melhor consulta: SELECT customer_id, order_id, ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY order_date) AS row_num FROM orders; Escreva um SQL mais inteligente, não apenas um SQL válido O fato de uma consulta ser executada não significa que ela esteja ajudando. Evitar essas armadilhas comuns tornará seu SQL mais rápido, mais limpo e muito mais útil. Se você quiser continuar praticando a maneira correta de escrever consultas, confira a trilhaTrilha de Práticas em SQL em LearnSQL.com.br. Ela está repleta de exercícios práticos que o ajudam a aprimorar suas habilidades por meio da prática, não apenas da leitura. Tags: práticas sql sql