TL; DR
Es el operador NULLseguro igual .
Al igual que el =operador regular , se comparan dos valores y el resultado es 0(no igual) o 1(igual); en otras palabras: 'a' <=> 'b'rendimientos 0y 'a' <=> 'a'rendimientos 1.
A diferencia del =operador regular , los valores de NULLno tienen un significado especial y, por lo tanto, nunca dan NULLcomo resultado posible; entonces: 'a' <=> NULLrendimientos 0y NULL <=> NULLrendimientos 1.
Utilidad
Esto puede ser útil cuando ambos operandos pueden contener NULLy necesita un resultado de comparación consistente entre dos columnas.
Otro caso de uso es con declaraciones preparadas, por ejemplo:
... WHERE col_a <=> ? ...
Aquí, el marcador de posición puede ser un valor escalar o NULLsin tener que cambiar nada sobre la consulta.
Operadores relacionados
Además, <=>también hay otros dos operadores que se pueden usar para comparar NULL, a saber, IS NULLy IS NOT NULL; son parte del estándar ANSI y, por lo tanto, son compatibles con otras bases de datos, a diferencia de <=>MySQL.
Puede pensar en ellos como especializaciones de MySQL <=>:
'a' IS NULL ==> 'a' <=> NULL
'a' IS NOT NULL ==> NOT('a' <=> NULL)
En base a esto, su consulta particular (fragmento) se puede convertir a la más portátil:
WHERE p.name IS NULL
Apoyo
El estándar SQL: 2003 introdujo un predicado para esto, que funciona exactamente como el <=>operador de MySQL , en la siguiente forma:
IS [NOT] DISTINCT FROM
Lo siguiente es universalmente compatible, pero es relativamente complejo:
CASE WHEN (a = b) or (a IS NULL AND b IS NULL)
THEN 1
ELSE 0
END = 1
spaceshipoperador