EXISTS, IN y la trampa del NULL en SQL
Las dos se leen igual hasta que la subconsulta devuelve un NULL, y entonces discrepan.
SELECT name
FROM customers AS c
WHERE EXISTS (
SELECT 1
FROM orders AS o
WHERE o.customer_id = c.id
AND o.status = 'paid'
);
SELECT name
FROM customers AS c
WHERE NOT EXISTS (
SELECT 1
FROM payments AS p
WHERE p.order_id = c.id
);
Cómo funciona
EXISTSse detiene en la primera fila que coincide; nunca compara valores.NOT INsobre una subconsulta con un NULL no devuelve fila alguna.NOT EXISTSes la forma que sigue portándose bien cuando los datos se ensucian.
Palabras clave y builtins usados aquí
ANDASEXISTSFROMNOTSELECTWHEREc
El intento, en números
- Líneas
- 16
- Caracteres a escribir
- 231
- Tokens
- 57
- Ritmo de tres estrellas
- 95 tpm
Al ritmo de tres estrellas de 95 tokens por minuto, este intento toma unos 36 segundos.
Paso 2 de 3 en Hacerla más rápida; paso 9 de 17 en Planes y rendimiento.