Without knowing what you want to achieve it is hard to build the correct query. Maybe join with the aggregates or Oracle analytic ROW_NUMBER function could return the expected result without "doesnt work". You may try using one of them.
I know that an order by would not change the final result any how but i want to know why is this not working what the reason behind this and yes i am able to get the result if i omit this 'doesnt work' condition but knowing the concept behind this is the reason i have posted this query.
Maybe you could get more meaningful answer(s) if you exactly specified what "not working" exactly means.
Without it, I may only repeat myself - the subquery with or without ORDER BY returns the same PUB_ID values. The whole query itself returns at most three random rows from PUBLISHERS satisfying the WHERE condition. So, they may be different for the different subquery, or even when running twice the same query. They may be the same. No guarantee, as the query is not deterministic.