Uw vraag is bijna juist en het is de juiste manier om dat te doen (en de meest efficiënte)
SELECT books.*, count(orders.book_id) as number_of_orders
from books
left join orders
on (books.book_id = orders.book_id)
group by
books.book_id
COUNT(*)
kan NULL-waarden in de telling opnemen omdat het alle rijen telt, terwijl COUNT(orders.book_id)
niet omdat het NULL-waarden in het gegeven veld negeert.