Estás usando mal el case expresión. Hay dos formas. El formulario que desea es:
(CASE WHEN userName IS NULL THEN 'was null'
WHEN userName IS NOT NULL THEN 'was not null'
END) AS caseExpressionTest
Nota:No hay userName después del CASE .
Esto verifica cada condición deteniéndose en la primera.
MySQL interpreta los valores booleanos como un valor válido. Entonces su versión es:
-- when userName is NULL
(CASE userName
WHEN 0 THEN 'was null'
WHEN 1 THEN 'was not null'
END AS caseExpressionTest
Esto devolverá NULL .
O:
-- when userName is not NULL
(CASE userName
WHEN 1 THEN 'was null'
WHEN 0 THEN 'was not null'
END AS caseExpressionTest
Presumiblemente, userName es una cadena. Esto convertirá userName a un número entero basado en los primeros dígitos. Si no hay dígitos iniciales, obtienes 0 , por lo que hay una coincidencia.