Generelt skal du være lidt varsom med at lave en enkelt forespørgsel baseret på alle mulige parametre. Det kan ofte bedre betale sig at dele det op i flere bidder. Det giver som regel bedre eksekveringsplaner (= hurtigere udførsel).
At bruge funktioner i selektionskriterier skal man være varsom med, da det gør, at SQL serveren ikke kan bruge evt. indexer på feltet.
Bemærk også, at null er en "not assigned" indikator og ikke en værdi. Derfor kan du ikke bruge en Null = Null eller Null <> Null som selektionskriterie. Man kan teste det via WHERE xxx IS NULL og WHERE xxx IS NOT NULL. Som Arne skriver, kan man bruge ISNULL til at erstatte en Null indikator med en værdi og bruge denne til at teste på.
Men funktioner i selektionskriterier ødelægger performance, da alle rækker jo skal behandles af den brugte funktion.
Det vil derfor ofte være bedre og mere effektivt (især ved store tabeller) at bruge en IF sætning til at udføre forskellige forespørgsler:
IF @minParamter1 IS NULL
SELECT mitFelt1, mitFelt2
FROM minTabel
WHERE mitFelt3 IS NULL AND mitFelt2=3
ELSE
SELECT mitFelt1, mitFelt2
FROM minTabel
WHERE mitFelt3 IS NOT NULL AND mitFelt2=3
Dermed er SQL Server i stand til at lave optimale forespørgsler, der bruger indexer korrekt.
Det vil altid være en afvejning af flere faktorer, der afgør hvilken vej der er den bedste.
Du kan måske også få lidt inspiration ved at kigge på denne artikel:
http://www.sqlservercentral.com/blogs/sqlstudies/2017/02/27/queries-with-optional-parameters/