In the all_tables and user_tables view, there is a column named "num_rows" which gives us the number of rows in that table, but it is not equivalent to count(*) from that respective table. Can you please let me know if this is a bug or is this the expected functionality. If so, what does this signify?
Column NUM_ROWS updates ANALYZE command. Its value means number of rows that the table had in the moment of analyze process and it's used by the optimizer for computing plans and for that purpose it doesn't need to be exact.
For exact count of rows in a table you should use count().