As already mentioned, you cannot just base it on cost, as the cost is not specifically a good indicator of the amount of work that will need to be done, it's just an internal figure calculated for that query and isn't really that comparible across different queries.
If you're intending to see if there is data in a table because you want to know whether to query it or not, you are actually better to just try and query the data and capture the NO_DATA_FOUND exception and handle that. In that case it requires no effort or cost up front.
I would be reluctant to mention names without a pointer to the actual source.
- one could truncate a table in a flash, your EXISTS or ROWNUM query could be just as incorrect as querying USER_TABLES
In the end I'd just stick to:
In short: I wouldn't bother to check.