It depends on what you are trying to optimize. A sale_product table is a much better way to go if you want flexibility and ability to do complex queries. The other way could be suitable for a few scenarios where performance of one type of query is really important.
If you are just starting, I would consider a normalized design first, because I would consider the other design premature optimization. When designing a database model, I like to think of what kind of operations the database will need to support (both frontend and reporting), and then design the model.