Solución - Encuentra el cliente referido
Base de datos
Estrategía: Usar <>(!=) y IS NULL
Intuición
Algunas personas llegan a la siguiente solución en base a su intuición.
SELECT name FROM customer WHERE referee_Id <> 2; Sin embargo, esta consulta solo regresa un resultado: Zack aunque hay 4 clientes no referidos por Jane (incluyéndose asi misma). Todos los clientes que no fueron referidos (aquellos con valor NULL en la columna referee_id) no se muestran. ¿Pero por qué sucede esto?
Algoritmo
MySQL usa lógica de tres valores — TRUE, FALSE y UNKNOWN. Cualquier cosa comparada con NULL se evalúa al tercer valor: UNKNOWN. Ese “cualquier cosa” incluye al propio NULL. Por eso MySQL proporciona las operaciones IS NULL y IS NOT NULL para comprobar específicamente NULL.
Por tanto, una condición más referee_id IS NULL necesita ser agregada a la cláusula WHERE como se muestra
en seguida.
Implementación
SELECT name FROM customer WHERE referee_id <> 2 OR referee_id IS NULL; Otra solución válida
SELECT name FROM customer WHERE referee_id != 2 OR referee_id IS NULL; Consejos
La siguiente solución también es incorrecta por la misma razón mencionada antes. La clave es siempre usar los
operadores IS NULL ó IS NOT NULL para explícitamente verificar que el valor es o no NULL.
SELECT name FROM customer WHERE referee_id = NULL OR referee_id <> 2;