Existe algum motivo para as consultas a seguir retornarem resultados diferentes?
select count(id)
from mytable
where
status='active'
and ((textfield1 ilike '%needle%') or (textfield2 ilike '%needle%'));
vs
select count(id)
from mytable
where
status='active'
and ((textfield1 || textfield2) ilike '%needle%');
Quando estou executando essas consultas, a primeira está retornando 26
e a segunda 19
.
Que erro idiota estou cometendo?
Você tem valores nulos? Se sim, o segundo formulário será avaliado como nulo.
Por exemplo:
Desta forma a segunda forma pode ter menos valores que a primeira.
Tente isto:
Sim, a razão é que as consultas não são logicamente equivalentes.
Basta colocar
textfield1 = 'I need'
e outextfield2 = 'lemons'
.Em seguida,
(textfield1 ilike '%needle%') or (textfield2 ilike '%needle%')
avalia para ,false
mas
textfield1 || textfield2 = 'I needlemons'
também
(textfield1 || textfield2) ilike '%needle%'
avalia paratrue
.