Hola joiscafo:
Hay que revisar varios detalles:
1. No utilices los mismos nombres para parámetros y para nombres de campos, ya que esto ocasiona problemas, una sugerencia es que antepongas algun prefijo a los parámetros para diferenciarlos:
de tal suerte que cuando lo utilices sea claro que se trata de dos cosas distintas:
2. NULL no es un dato como tal, sino más bien un ESTADO, por lo tanto, no puedes aplicar el operador DIFERENTE DE (<>) ni el de igualdad (=), sino que tienes que utlizar IS NOT NULL o IS NULL según lo necesites:
3. Trata de crear la función sin el COLLATE, para determinar si es ahí donde tienes el problema o es alguna otra parte de la consulta.
Saludos
Leo.