JOINs embed database logic into your application, affecting flexibility and portability.
Using JOINs tightly couples your application logic with the database schema, which can make changes to either side more challenging. While JOINs improve performance by reducing the number of queries, they can also lead to complex, less maintainable code if not carefully managed. In an e-commerce system, this might mean that changes in how orders and customers are related require significant rework in both SQL and Java code.
Additional Notes
What are the design consequences of using JOINs in application logic?