Помните, что NULL отличается от 0. Поэтому два фрагмента кода в вопросе могут возвращать разные результаты для одного и того же ввода.
Например, если BeginningQuantity имеет значение NULL, первое выражение оценивается как NULL:
CASE WHEN (NULL + ?)=0 THEN 0 ELSE ?/(NULL + ?) END
Теперь (NULL +?) Равно NULL, а NULL = 0 - false, поэтому предложение ELSE оценивается, давая? / (NULL +?), Что приводит к NULL. Тем не менее, второе выражение становится:
ISNULL((?)/NULLIF(NULL + ?,0),0)
Здесь NULL +? становится NULL, и поскольку NULL не равен 0, NULLIF возвращает первое выражение, которое является NULL. Внешний ISNULL ловит это и возвращает 0.
Итак, примите решение: вы защищаете от деления на ноль или деления на NULL? ; -)