Can you explain the difference between various types of joins and when to use each in a testing context?