Yes. An ORDER BY is almost always necessary to get expected ( => the same) results.
Note that if you're running a new query for each new page, it's still possible for the rows shown at OFFSET X to change due to inserts/updates/deletes on the underlying data.
As you increase the OFFSET, the query can get (a lot) slower. So it's often better to use the "seek method" instead; here you save a value (e.g. primary key) from the last row fetched on the current page. Then use this as the starting point for the next page:
https://blog.jooq.org/faster-sql-paging-with-jooq-using-the-seek-method/ https://blog.jooq.org/why-most-programmers-get-pagination-wrong/