sql >> Base de Datos >  >> RDS >> Mysql

Misterio de MySQL:el valor nulo no es diferente de la cadena no nula

Exactamente. NULL representa un valor desconocido, no un valor específico (no es lo mismo que NULL en C, o nil en Ruby, etc.) En SQL, si compara algo con el valor desconocido, el resultado también es desconocido. Y no obtendrá las filas donde WHERE la condición es desconocida.

Prueba esto:

SELECT NULL <> 2;

y verás NULL como resultado.

Prueba esto:

SELECT * FROM t WHERE NULL;

y no saldrán filas, incluso si la tabla t es enorme.

Si realmente necesitas lo que dijiste que querías (y no estoy defendiendo esto), puedes hacer algo como esto:

SELECT T.f1, T.f2
FROM (SELECT NULL f1, 'a' f2) T
WHERE ((T.f1 IS NULL OR T.f2 IS NULL)
    AND (T.f1 IS NOT NULL OR T.f2 IS NOT NULL))
    OR T.f1 <> T.f2