ROWNUM vs ROW_NUMBER()

ROWNUM

Assigned before sorting. Use subqueries for proper ordering.

SELECT * FROM (SELECT * FROM employees ORDER BY salary DESC) WHERE ROWNUM <= 5;

ROW_NUMBER()

SELECT * FROM (
  SELECT e.*, ROW_NUMBER() OVER (ORDER BY salary DESC) AS rn
  FROM employees e
) WHERE rn <= 5;