为什么在select语句中添加count(*)会强制子行存在于子查询中?

LBu*_*kin 2 sql oracle subquery

在Oracle 9i上,为什么以下产生结果'abc'

select 'abc ' || (select txt from 
     (select 'xyz' as txt from dual where 1=2)) 
from dual
Run Code Online (Sandbox Code Playgroud)

虽然这会产生'abc xyz':

select 'abc ' || (select txt from 
     (select count(*), 'xyz' as txt from dual where 1=2)) 
from dual
Run Code Online (Sandbox Code Playgroud)

为什么在子查询中添加count(*)会导致不同的行为?谓词是否应该where 1=2排除子查询中的任何结果?

Car*_*ter 15

select count(*) from dual where 1=2
Run Code Online (Sandbox Code Playgroud)

返回0.即,值为零的行.