Почему добавление круглых скобок в SQL-запрос может привести к изменению результатов?

Когда я выполняю следующий запрос, даже если есть 11 совпадающих записей, ни одна из них не возвращается в том виде, в каком она была написана. Однако, если я уберу круглые скобки в строках 6 и 9, все 11 записей будут возвращены, как и ожидалось.

1  select obj_id, obj_title, UI_DISPLAYNAME
2  from PITS_OBJECT 
3  LEFT OUTER JOIN ui_displayname_view ON obj_create_ui_id = UI_ID  
4  where
5  /* w/ parens, no results, w/o parens, expected results */
6  (
7     Upper( UI_DISPLAYNAME ) LIKE Upper( '%smith%' )  
8     OR Upper( OBJ_TITLE ) LIKE Upper( '%smith%' ) 
9  )
10 /* end w/ parents, no results.... */
11 AND OBJ_ID IN (select obj_id from PITS_OBJECT where 
12     (UPPER( OBJ_TITLE ) LIKE UPPER( '%smith%' )) 
13     AND obj_id in( select sa_obj_id as obj_id from security_access 
14         where sa_type_id = 494 
15         and sa_usrgrp_id = 35
16         and sa_usrgrp_type_id = 230 
17         union 
18         select sa_obj_id from security_access 
19         where sa_type_id = 494 
20         and sa_usrgrp_type_id = 231 
21         and sa_usrgrp_id in ( select ug_gi_id from user_group where ug_ui_id = 35)) )

Почему это имеет значение? Разве оператор ИЛИ не означает, что одно или другое должно быть правдой? Что мне здесь не хватает?

15
задан ean5533 17 November 2011 в 20:36
поделиться