Precedência de operador lógico
Quando mais de um operador lógico for usado em uma instrução, NOT é avaliado primeiro, então AND e finalmente OR. Operadores aritméticos e bit a bit são tratados antes dos operadores lógicos.
No exemplo a seguir, a condição de cor pertence ao Modelo do Produto 21 e não ao modelo do produto 20, porque AND tem precedência sobre OR.
USE AdventureWorks;
GO
SELECT ProductID, ProductModelID
FROM AdventureWorks.Production.Product
WHERE ProductModelID = 20 OR ProductModelID = 21
AND Color = 'Red'
Você pode alterar o significado da consulta adicionando parênteses para forçar a avaliação de OR primeiro. A consulta a seguir só encontra produtos nos modelos 20 e 21, que são vermelhos.
SELECT ProductID, ProductModelID
FROM AdventureWorks.Production.Product
WHERE (ProductModelID = 20 OR ProductModelID = 21)
AND Color = 'Red'
Usar parênteses, até mesmo quando eles não são necessários, pode melhorar a legibilidade das consultas e reduzir a chance de cometer um erro sutil devido a precedência de operador. Não há penalidade de desempenho significativa usando parênteses. O exemplo a seguir é mais legível que o exemplo original, embora eles sejam sintaticamente semelhantes.
SELECT ProductID, ProductModelID
FROM AdventureWorks.Production.Product
WHERE ProductModelID = 20 OR (ProductModelID = 21
AND Color = 'Red')
Consulte também