Это потому, что вы не можете сравнить с нулем в SQL, у него есть специальный оператор IS NULL
для проверки на нулевые значения.
Первый запрос будет преобразован в сравнение, где параметрnull:
WHERE ParentElementId = @param
Это не работает, потому что сравнение двух нулевых значений не дает true.
Второй запрос будет преобразован в нулевую проверку, потому что нулевое значениеконстанта:
WHERE ParentElementId IS NULL
Это работает, потому что EF не одурачен, чтобы перевести его в сравнение.