TL; DR
É o operador NULLseguro igual .
Como o =operador regular , dois valores são comparados e o resultado é 0(não igual) ou 1(igual); em outras palavras: 'a' <=> 'b'rendimentos 0e 'a' <=> 'a'rendimentos 1.
Diferentemente do =operador regular , os valores de NULLnão têm um significado especial e, portanto, nunca produzem NULLcomo um resultado possível; então: 'a' <=> NULLrendimentos 0e NULL <=> NULLrendimentos 1.
Utilidade
Isso pode ser útil quando os dois operandos podem conter NULL e você precisa de um resultado consistente de comparação entre duas colunas.
Outro caso de uso é com instruções preparadas, por exemplo:
... WHERE col_a <=> ? ...
Aqui, o espaço reservado pode ser um valor escalar ou NULL sem precisar alterar nada sobre a consulta.
Operadores relacionados
Além disso, <=>existem outros dois operadores que podem ser usados para comparar NULL, a saber IS NULLe IS NOT NULL; eles fazem parte do padrão ANSI e, portanto, são suportados em outros bancos de dados, ao contrário<=> que é específico do MySQL.
Você pode pensar nelas como especializações do MySQL <=>:
'a' IS NULL ==> 'a' <=> NULL
'a' IS NOT NULL ==> NOT('a' <=> NULL)
Com base nisso, sua consulta específica (fragmento) pode ser convertida para a mais portátil:
WHERE p.name IS NULL
Apoio, suporte
O padrão SQL: 2003 introduziu um predicado para isso, que funciona exatamente como o <=>operador do MySQL , da seguinte forma:
IS [NOT] DISTINCT FROM
O seguinte é universalmente suportado, mas é relativamente complexo:
CASE WHEN (a = b) or (a IS NULL AND b IS NULL)
THEN 1
ELSE 0
END = 1
spaceshipoperador