rownum=1 is good ... for the times when it makes sense to use it.
For example, we've got x=0 at the "start" and "end" of a table and we want to do an existence check.
SQL> create table t as
2 select 0 x, rpad('y',100) y
3 from dual ;
Table created.
SQL>
SQL> insert into t
2 select rownum, rownum
3 from dual
4 connect by level <= 100000;
100000 rows created.
SQL>
SQL> insert into t
2 select 0 x, rpad('y',100) y
3 from dual ;
1 row created.
SQL>
SQL> commit;
Commit complete.
SQL>
SQL> set autotrace on stat
SQL> select * from t where x = 0;
X Y
---------- ----------------------------------------------------------------------------------------------------
0 y
0 y
Statistics
----------------------------------------------------------
2 recursive calls
1 db block gets
239 consistent gets
1 physical reads
184 redo size
852 bytes sent via SQL*Net to client
552 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
2 rows processed
SQL>
SQL> set autotrace on stat
SQL> select * from t where x = 0 and rownum = 1;
X Y
---------- ----------------------------------------------------------------------------------------------------
0 y
Statistics
----------------------------------------------------------
1 recursive calls
0 db block gets
4 consistent gets
0 physical reads
0 redo size
698 bytes sent via SQL*Net to client
552 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
SQL>
SQL>
The 'rownum=1' makes it faster because we get to *stop* after the first row.
But, what if having that second occurrence of x=0 is a major problem - something that we should know about because it should never occur. In that case, we *want* the query to return 2 rows (or crash) because something is wrong. Adding 'rownum=1' has in effect hidden that problem from us.
Another place to be careful is in complex queries, because typically any (sub)query with a rownum clause must be resolved before it can merged with other parts of the query. Hence it limits the optimizer choices.
Hope this helps.