Como os operadores "IS" e "=" do SQL diferem?
Estou construindo algumas instruções preparadas que usam valores parametrizados. Como um exemplo
SELECT * FROM "Foo" WHERE "Bar"=@param
As vezes@param
pode serNULL
. Nesses casos, desejo que a consulta retorne registros ondeBar
éNULL
, mas a consulta acima não fará isso. Aprendi que posso usar oIS
operador para isso. Em outras palavras
SELECT * FROM "Foo" WHERE "Bar" IS @param
Além do tratamento diferenciado deNULL
, existem outras maneiras pelas quais as duas declarações acima se comportarão de maneira diferente? E se@param
não éNULL
, mas sim, digamos,5
? Está usando oIS
operador, nesse caso, uma coisa segura (e sã) a ser feita? Existe alguma outra abordagem que eu deveria seguir?