Duplicate records on joining
Try adding books.id to ORDER BY. If books_data.date is not unique, relative order of rows in resultest is not guaranteed. Say you have 5 rows with date1, 10 rows with date2, and 5 with date3; date1 &lt; date2 &lt; date3.  

Then some rows with date2 may appear on both pages, some on neither, and , if you are lucky enough, you may sometimes see expected results.
Assuming (books.id,books_data.date ) unique the following should return consistent results:

SELECT DISTINCT "books"."id", "books_data"."date" FROM "books"
LEFT OUTER JOIN "books_data" ON "books_data"."book_id" = "books"."id"
ORDER BY books_data.date DESC, books.id ASC LIMIT 10 OFFSET 0;


Short illustration : 


id | some_non_unique_data  
1  |  'val1'  
2  |  'val2'  
3  |  'val2'


When splitting such data into 2 pages, 2 rows per page ordering only by some_non_unique_data ascending the engine is free to return row id=2(or id=3) on any page. emphasized text