Example:
select count(*) from my table
where
column1 is not null
and
(column1 = 4 OR column1 = 5)
Example 2:
select count(*) from my table
where
column1 is not null
and
column1 = 4 OR column1 = 5
In my database with the real column names, I get two different results. The one with the parentheses is right because if I do:
select count(*) from my table
where
column1 is not null
and
column1 = 4
and then
select count(*) from my table
where
column1 is not null
and
column1 = 5
and add them together, I get the right answer…I think. Same as the first example with the parentheses above.
Why do I get different results by changing precedence with the OR test?
It’s not Oracle or SQL. It’s basic boolean logic. The AND condition is “stronger” (has precedence) than OR, meaning it will be evaluated first:
Means
is evaluated first, then OR is applied between this and
column1 = 5Adding parentheses ensures OR is evaluated first and then the AND.
Pretty much like in maths:
but
More reading here: http://msdn.microsoft.com/en-us/library/ms190276.aspx