BOL правильно.-
имеет более низкий приоритет, чем *
, поэтому
-A * B
анализируется как
-(A * B)
Умножение, являющееся тем, чем оно является, вы обычно не замечаете этого, кроме случаев, когда смешиваетев двух других бинарных операторах с равным приоритетом: /
и %
(и %
редко используется в составных выражениях, подобных этому).Итак,
C / -A * B
Анализируется как
C / -(A * B)
, объясняя результаты.Это нелогично, потому что в большинстве других языков унарный минус имеет более высокий приоритет, чем *
и /
, но не в T-SQL, и это правильно задокументировано.
Хороший (?) Способчтобы проиллюстрировать это:
SELECT -1073741824 * 2
производит арифметическое переполнение, потому что -(1073741824 * 2)
производит 2147483648
как промежуточное звено, которое не помещается в INT
, но
SELECT (-1073741824) * 2
выдает ожидаемый результат -2147483648
, что и делает.