Explain the difference between various types of joins and when you would use each in a production pipeline.