Como puede ver en EXPLAIN, "book_id" aparece como una posible clave. Si MySQL no lo usa, es solo que el optimizador no cree que aceleraría la consulta. Lo cual es cierto si "book_sales" solo tiene 2 filas, y el 100% de esas filas comparten el mismo "book_id". Se llama cardinalidad por cierto. Cómo evitar los escaneos de tablas (Manual MySQL)
Intente llenarlo con más filas y debería ver que MySQL usará un índice para la unión.
Editar:la consulta
SELECT sale_amount, price
FROM books, book_sales
FORCE INDEX ( book_id )
WHERE book_sales.book_id = books.book_id
AND books.author_id =1
... tampoco funcionará en ese caso porque el optimizador aún reconoce que la lectura del índice es subóptima y cambia el orden de la tabla para evitarlo. Puede forzar el orden de la tabla usando STRAIGHT_JOIN . Sin embargo, esto es un truco porque obliga a MySQL a ejecutar la consulta de una manera que no es la mejor.
EXPLAIN
SELECT sale_amount, price
FROM books
STRAIGHT_JOIN book_sales FORCE INDEX (book_id) ON book_sales.book_id = books.book_id
WHERE books.author_id = 1