Tema SQL
INTERSECT y EXCEPT / MINUS
Intersección y diferencia de conjuntos de filas entre dos SELECT.
Descripción
INTERSECT devuelve filas presentes en ambas consultas. EXCEPT (o MINUS en Oracle) devuelve filas del primer SELECT que no están en el segundo. Mismo número y tipos de columnas (manual §16.3–16.4).
Estructura general
Forma habitual de la sentencia: orden de cláusulas, qué parte filtra, agrupa o proyecta columnas, y qué devuelve el motor. Cópiala como plantilla y sustituye nombres por tus tablas reales.
SELECT a, b FROM t1
INTERSECT
SELECT a, b FROM t2;
SELECT a, b FROM t1
EXCEPT
SELECT a, b FROM t2;
Componentes
Cada componente tiene un papel concreto en la ejecución lógica de la sentencia. Léelos en orden: así entiendes qué puedes omitir, qué es obligatorio y qué expresiones son válidas en cada sitio según tu motor.
- Compatibilidad
- No todos los motores implementan ambos; MySQL añadió INTERSECT/EXCEPT en versiones recientes.
Ejemplos
Ejemplo 1
SELECT email FROM newsletter_activos
INTERSECT
SELECT email FROM clientes;
Ejemplo 2
SELECT id FROM vivos EXCEPT SELECT id FROM archivados;
Los ejemplos son ilustrativos. En producción usa consultas parametrizadas (prepared statements), revisa índices y aplica el principio de menor privilegio en cuentas de base de datos.