Joins combine records from different views based on join condition just like in databases. Joins would be required for creating derived views between different views There are different types of joins and join methods. You can take a look at following documents of the Virtual DataPort guide for more details.
1) [Join Operation](https://community.denodo.com/docs/html/browse/latest/vdp/vql/queries_select_statement/from_clause/join_operation)
2) [Optimizing Join Operations](https://community.denodo.com/docs/html/browse/latest/vdp/administration/optimizing_queries/optimizing_join_operations/optimizing_join_operations)
Associations represent relationship between elements (rows) of two views. Associations can also be marked as referential constraints and they would behave like Primary key-Foreign key relationship in database. For more details on Associations and why they are useful take a look at [Associations in Denodo](https://community.denodo.com/kb/view/document/Associations%20in%20Denodo?category=Combining+Data) knowledge base article.
Regarding your final question, Associations along with Joins can be very useful from the performance perspective. They help the Virtual DataPort engine determine the best execution plan and optimize the queries. Two optimization techniques where associations are useful are Aggregation Push Down and Branch Pruning. Take a look at the [Optimization for Logical DataWarehouse](https://community.denodo.com/kb/view/document/Denodo%20Query%20Optimizations%20for%20the%20Logical%20Data%20Warehouse?category=Performance+%26+Optimization) for performance optimization using Associations. The example mentioned in the document is of a typical star schema.
Hope this helps!