Ordine di precedenza degli operatori logici
Se in un'istruzione vengono utilizzati più operatori logici, viene valutato prima NOT, quindi AND e infine OR. Gli operatori aritmetici (e bit per bit) vengono valutati prima degli operatori logici.
Nell'esempio seguente, la condizione è relativa a ProductModel 21 e non a ProductModel 20, perché AND ha la priorità rispetto a OR.
USE AdventureWorks;
GO
SELECT ProductID, ProductModelID
FROM AdventureWorks.Production.Product
WHERE ProductModelID = 20 OR ProductModelID = 21
AND Color = 'Red'
È possibile modificare il significato della query aggiungendo le parentesi in modo da imporre la priorità dell'operatore OR nell'ordine di valutazione. La query seguente trova solo i prodotti di colore rosso dei modelli 20 e 21.
SELECT ProductID, ProductModelID
FROM AdventureWorks.Production.Product
WHERE (ProductModelID = 20 OR ProductModelID = 21)
AND Color = 'Red'
L'utilizzo delle parentesi, anche quando non è obbligatorio, può contribuire a rendere le query più leggibili e a ridurre il rischio di errori dovuti all'ordine di precedenza degli operatori. Non ha inoltre alcun effetto negativo rilevante sulle prestazioni. L'esempio seguente risulta più leggibile rispetto a quello precedente, anche se sintatticamente i due esempi sono identici.
SELECT ProductID, ProductModelID
FROM AdventureWorks.Production.Product
WHERE ProductModelID = 20 OR (ProductModelID = 21
AND Color = 'Red')
Vedere anche