很明显是NULL引起的。
你把order by 之前的结果集查出来,用select * from ... 你会发现,有四行,其中两行的 ID 是 空值,空值怎么会排序呢?
一切运算和NULL,结果都是null,在逻辑表达式中表现为:非真!
简单地说,你用了含NULL列做了排序,ID为NULL的记录在排序前,被默认地过滤掉了,所以只有两行结果。
不知道这是什么原因,貌似不是null的原因,在oracle 10g做的测试,test1
A B
1 AAAA
2 null
3 null
4 DDDD
2 null
3 null
test2
A
1
2
3
4
然后SELECT COUNT(1) FROM (SELECT b FROM test a,test2 b WHERE a.a = b.a) ;
SELECT COUNT(1) FROM (SELECT b FROM test a,test2 b WHERE a.a = b.a) ORDER BY b;
SELECT COUNT(1) FROM test a;
SELECT COUNT(1) FROM (SELECT b FROM test a) ;
SELECT COUNT(1) FROM (SELECT b FROM test a) ORDER BY b;
得到的结果都是6