GUÍA COMPLETA DEL OPERADOR EXCEPT EN MYSQL
El operador EXCEPT es un operador de conjuntos del estándar SQL que devuelve las filas de la primera consulta que no existen en la segunda consulta. Es el equivalente a la operación matemática de diferencia de conjuntos. El soporte de EXCEPT en MySQL es bastante reciente, por lo que es importante conocer tanto su sintaxis nativa como las alternativas para versiones anteriores.Sintaxis del operador EXCEPT
SELECT columna1, columna2, ...
FROM tabla1
[WHERE ...]
EXCEPT
SELECT columna1, columna2, ...
FROM tabla2
[WHERE ...];
Opciones disponibles
- "EXCEPT DISTINCT": Elimina duplicados, comportamiento por defecto.
- "EXCEPT ALL": Mantiene duplicados.
Ejemplos
Ejemplo básico
Se tienen dos tablas: "clientes_actuales y" "clientes_antiguos".-- Clientes que están en la lista actual pero NO en la antigua
SELECT id, nombre, email
FROM clientes_actuales
EXCEPT
SELECT id, nombre, email
FROM clientes_antiguos;
Ejemplo con condiciones
-- Productos que se vendieron en 2025 pero NO en 2024
SELECT producto_id, nombre
FROM ventas_2025
EXCEPT
SELECT producto_id, nombre
FROM ventas_2024;
Múltiples EXCEPT
SELECT id FROM tablaA
EXCEPT
SELECT id FROM tablaB
EXCEPT
SELECT id FROM tablaC;
Mejores Prácticas
- Asegúrate de la compatibilidad de versión antes de usar EXCEPT.
- Las columnas en ambas consultas deben tener el mismo número y tipos de datos compatibles.
- Usa índices en las columnas que se comparan para mejorar el rendimiento.
- Priorizar EXCEPT para que la consulta sea más legible en MySQL 8.0.31+.
- Para rendimiento crítico, probar siempre con EXPLAIN.