Boa tarde pessoal, fiz uma consulta que é a seguinte: select * from venda v where V.MAPA IS NULL and v.cancelado is null and (v.cidade not in ('53','54','28','8','18','22','27','110','101','111') or v.venda in ( select v1.venda from venda v1 where v1.cidade in ('1','2','21','41') and V1.DATDOC >= (SELECT CURRENT_DATE FROM RDB$DATABASE))) Vou explicar a hierarquia do que preciso de retorno da consulta abaixo: (primeira parte: quero todas as vendas que não estão em mapa nenhum e não estejam canceladas) select * from venda v where V.MAPA IS NULL and v.cancelado is null (segunda parte: trazer as vendas das cidades que não sejam das cidades que coloquei no not in ) and (v. not in ('53','54','28','8','18','22','27','110','101','111') (terceira parte: dessas vendas que retornaram quero retirar as da cidade ('1','2','21','41') que são de outros dias que não o dia de hoje, tipo o que vende na cidade ('1','2','21','41') ontem já não me enteressa) or v.venda in (select v1.venda from venda v1 where v1.cidade in ('1','2','21','41') and V1.DATDOC >= (SELECT CURRENT_DATE FROM RDB$DATABASE))) Mas de qualquer forma que eu faça, colocando ou retirando os parenteses o retorno é sempre o mesmo, sempre vem as vendas das cidades que preciso retirar da consulta usando o OR, sendo que pelo meu entender o que coloquei após o OR deveria não vir na consulta, alguma ideia?