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?

questionAnswers(5)

yourAnswerToTheQuestion