Andrei,
Expresia "ISNULL(ID_AnUniv, -1) = CASE WHEN ISNULL(@ID_AnUniv, -1) = -1 THEN ISNULL(ID_AnUniv, -1) ELSE ISNULL(@ID_AnUniv, -1)"
nu este identică cu expresia "coalesce(ID_AnUniv, -1) = coalesce(@ID_AnUniv,ID_AnUniv, -1)" atunci când ID_AnUniv are o valoare oarecare (de exemplu 7), iar @ID_AnUniv este -1. Acest lucru se poate testa astfel:
SELECT a,b,
CASE WHEN ISNULL(a,-1)=CASE WHEN ISNULL(b,-1)=-1 THEN ISNULL(a,-1) ELSE ISNULL(b,-1) END THEN 'true' ELSE 'false' END as Expr1,
CASE WHEN COALESCE(a,-1)=COALESCE(b,a,-1) THEN 'true' ELSE 'false' END as Expr2,
CASE WHEN COALESCE(a,-1)=COALESCE(nullif(b,-1),a,-1) THEN 'true' ELSE 'false' END as Expr3
FROM (
SELECT NULL A, NULL B
UNION SELECT NULL, -1
UNION SELECT NULL, 1
UNION SELECT -1, NULL
UNION SELECT -1, -1
UNION SELECT -1, 1
UNION SELECT 1, NULL
UNION SELECT 1, -1
UNION SELECT 1, 1
UNION SELECT 2, 1
) x
O expresie simplificată care ar fi identică cu prima expresie este: "coalesce(ID_AnUniv, -1) = coalesce(nullif(@ID_AnUniv,-1),ID_AnUniv, -1)"
Şi asta presupunând că ID_AnUniv şi @ID_AnUniv sunt de tip int, pt că dacă tipuri diferite, COALESCE se comportă diferit de ISNULL; vezi:
http://databases.aspfaq.com/database/coalesce-vs-isnull-sql.htmlRăzvan