Prioridad de operador (Transact-SQL)

Cuando una expresión compleja tiene múltiples operadores, la prioridad de operador determina la secuencia en que se realiza la operación. El orden de ejecución puede afectar de manera significativa al valor resultante.

Los operadores tienen los niveles de prioridad que se muestran en la siguiente tabla. Un operador de los niveles más altos se evalúa antes que un operador de un nivel más bajo.

Nivel

Operadores

1

~ (operador bit a bit NOT)

2

* (multiplicar), / (dividir), % (módulo)

3

+ (positivo), - (negativo), + (sumar), (+ concatenar), - (restar), & (AND bit a bit) , ^ (OR exclusiva bit a bit), | (OR bit a bit)

4

=, >, <, >=, <=, <>, !=, !>, !< (operadores de comparación)

5

NOT

6

AND

7

ALL, ANY, BETWEEN, IN, LIKE, OR, SOME

8

= (asignación)

Cuando en una expresión dos operadores tengan el mismo nivel de prioridad de operador, se evalúan de izquierda a derecha en función de su posición dentro de la expresión. Por ejemplo, en la expresión utilizada en la siguiente instrucción SET, el operador de resta se evalúa antes que el operador de suma.

DECLARE @MyNumber int
SET @MyNumber = 4 - 2 + 27
-- Evaluates to 2 + 27 which yields an expression result of 29.
SELECT @MyNumber

Utilice paréntesis para suplantar la prioridad definida de los operadores en una expresión. Todo lo que está dentro del paréntesis se evalúa en primer lugar para producir un valor antes de que dicho valor lo pueda utilizar cualquier otro operador que se encuentre fuera del paréntesis.

Por ejemplo, en la expresión utilizada en la siguiente instrucción SET, el operador de multiplicación tiene una prioridad mayor que el operador de suma. Por lo tanto, se evalúa antes; el resultado de la expresión es 13.

DECLARE @MyNumber int
SET @MyNumber = 2 * 4 + 5
-- Evaluates to 8 + 5 which yields an expression result of 13.
SELECT @MyNumber

En la expresión utilizada en la siguiente instrucción SET, el paréntesis hace que primero se lleve a cabo la suma. El resultado de la expresión es 18.

DECLARE @MyNumber int
SET @MyNumber = 2 * (4 + 5)
-- Evaluates to 2 * 9 which yields an expression result of 18.
SELECT @MyNumber

Si una expresión tiene paréntesis anidados, se evalúa primero la expresión más anidada. El siguiente ejemplo contiene paréntesis anidados, con la expresión 5 - 3 en el conjunto de paréntesis más anidado. Esta expresión produce un valor de 2. Entonces, el operador de suma (+) suma este resultado a 4. Esto produce un valor de 6. Finalmente, 6 se multiplica por 2 para producir un resultado de expresión de 12.

DECLARE @MyNumber int
SET @MyNumber = 2 * (4 + (5 - 3) )
-- Evaluates to 2 * (4 + 2) which then evaluates to 2 * 6, and 
-- yields an expression result of 12.
SELECT @MyNumber