8th May 2025 Lectura de 4 minutos Las consultas SQL más inútiles (y lo que deberías hacer en su lugar) LearnSQL.es Team ejercicio de SQL SQL Índice 1. Seleccionar todo sin un propósito 2. Contar todo sin filtrar 3. Ordenar por defecto cuando el orden no importa 4. Ordenación sin límite 5. Agrupación sin etiquetas significativas 6. Utilizar HAVING en lugar de WHERE para filtrar filas 7. Filtrado de columnas calculadas sin indexación 8. Utilizar subconsultas en lugar de uniones 9. Autounión en lugar de utilizar Funciones de ventana Escriba un SQL más inteligente, no sólo un SQL válido Se ejecutan. Devuelven datos. Pero no tienen sentido. Esto es lo que no hay que escribir en SQL y lo que hay que hacer en su lugar. Algunas consultas SQL se ejecutan perfectamente, pero eso no significa que hagan nada útil. En este artículo, veremos ejemplos reales de consultas SQL que son válidas, de aspecto inofensivo y completamente inútiles. Malgastan recursos, ocultan información o simplemente añaden ruido. Para cada una de ellas, verás lo que está mal y cómo escribir una alternativa más inteligente en su lugar. ¿Quieres practicar cómo escribir mejores consultas ahora mismo? Pruebe la pistaEjercicio de SQL en LearnSQL.es - está construida para ayudarle a convertir la teoría en habilidad, con 12 cursos y más de 1000 ejercicios interactivos. Limpiemos la basura y escribamos consultas que realmente hagan el trabajo. 1. Seleccionar todo sin un propósito La consulta: SELECT * FROM orders; Por qué es inútil: extrae datos innecesarios, ralentiza las consultas y sobrecarga la base de datos. Qué hacer en su lugar: especificar sólo las columnas necesarias para mejorar el rendimiento. Mejor consulta: SELECT order_id, customer_id, total_amount FROM orders; 2. Contar todo sin filtrar La consulta: SELECT COUNT(*) FROM orders; Por qué es inútil: a menudo devuelve información engañosa si no se filtra. Qué hacer en su lugar: utilizar las condiciones de WHERE o GROUP BY para mejorar la precisión. Una consulta mejor: SELECT COUNT(*) FROM orders WHERE status = 'completed'; 3. Ordenar por defecto cuando el orden no importa La consulta: SELECT total_amount FROM orders ORDER BY customer_id; Por qué es inútil: añade tiempo de procesamiento sin beneficiar al análisis. Qué hacer en su lugar: utilizar ORDER BY intencionadamente, por ejemplo, para informes o visuapzación. Mejor consulta: no utilice ORDER BY a menos que sea necesario; SELECT total_amount FROM orders; 4. Ordenación sin límite Este caso es similar al anterior. La consulta: SELECT order_id, customer_id, total_amount FROM orders ORDER BY created_at DESC; Por qué es inútil: ordenar grandes conjuntos de datos sin límites es ineficiente. Qué hacer en su lugar: si es posible, utilice LIMIT o TOP. Una consulta mejor: SELECT order_id, customer_id, total_amount FROM orders ORDER BY created_at DESC LIMIT 10; 5. Agrupación sin etiquetas significativas La consulta: SELECT customer_id, COUNT(*) FROM orders GROUP BY customer_id; Por qué es inútil: Los ID por sí solos no proporcionan contexto: los resultados son difíciles de interpretar y no son procesables. Qué hacer en su lugar: asegúrese de incluir una etiqueta significativa pke nombre o correo electrónico. Una consulta mejor: 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. Utilizar HAVING en lugar de WHERE para filtrar filas La consulta: SELECT order_id, customer_id, total_amount FROM orders HAVING total_amount > 100; Por qué es inútil: HAVING está pensada para filtrar agregados, no filas. Aunque técnicamente funciona, distraerá al lector de la consulta para que no entienda su intención. Qué hacer en su lugar: utilizar WHERE antes de la agregación. Mejor consulta: SELECT order_id, customer_id, total_amount FROM orders WHERE total_amount > 100; 7. Filtrado de columnas calculadas sin indexación La consulta: SELECT order_id, customer_id, total_amount FROM orders WHERE YEAR(created_at) = 2023; Por qué es inútil: evita el uso de índices, provocando escaneos completos de la tabla. Qué hacer en su lugar: utilizar filtrado basado en rangos para aprovechar los índices. Mejor consulta: SELECT order_id, customer_id, total_amount FROM orders WHERE created_at >= '2023-01-01' AND created_at < '2024-01-01'; 8. Utilizar subconsultas en lugar de uniones La consulta: SELECT order_id, customer_id, total_amount FROM orders WHERE customer_id IN (SELECT customer_id FROM blacklisted_customers); Por qué es inútil: puede dar lugar a un rendimiento lento en comparación con JOINs. Qué hacer en su lugar: utilizar una INNER JOIN o LEFT JOIN. Mejor 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. Autounión en lugar de utilizar Funciones de ventana La 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 qué es inútil: causa complejidad y duplicación innecesarias. Qué hacer en su lugar: utilizar las funciones de ventana pke ROW_NUMBER(), RANK(), o LAG(). Una consulta mejor: SELECT customer_id, order_id, ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY order_date) AS row_num FROM orders; Escriba un SQL más inteligente, no sólo un SQL válido Que una consulta se ejecute no significa que sea útil. Evitar estas trampas comunes hará que su SQL sea más rápido, más limpio y mucho más útil. Si quieres seguir practicando la forma correcta de escribir consultas, consulta el temaEjercicio de SQL en LearnSQL.es. Está repleto de ejercicios prácticos que te ayudarán a perfeccionar tus habilidades haciendo, no sólo leyendo. Tags: ejercicio de SQL SQL