I have noticed there are 3 ways to get data across related objects into reports.
1.) Custom Report Types - you can create report types with a Parent Object and traverse down related Objects.
2.) Joined Reports - You can create a report with different objects into one reports
3.) Add fields to the layout of a custom report type through traversing related objects in the 'add fields related via lookup' on the side of the custom report tpye.
My Question is, why are there 3 different ways to get data into a report of related objects? And how do I know which one to use?