조인은 기본적으로 두 테이블을 합치는 것을 말합니다. 그리고 그 합치는 방식을, 어떻게 어떤식으로 붙이고 싶은지 사용자가 직접 명시 할 수 있습니다.

저는 이 그림이 조인의 종류를 가장 직관적으로 이해 할 수 있는 그림이라고 생각해서 가져와 보았습니다. 여기서 주의할 점은
SELECT * from table1 t1 *** join table2 t2 on t1.something = t2.anything;
형식을 따라 진행하게 됩니다.
Left Join은 우리가 원하는 테이블에 덫붙히고 싶은 정보를 찾아와 붙히는 형태의 조인입니다. 만약, 원하는 방식의 결합이 없다면, 그냥 null값을 갖게 됩니다. 번외로, right join이라는 개념도 있습니다. 정확히 반대의 개념입니다.
Inner Join은 주로 교집합으로 많이 설명하곤 합니다. 맞습니다. 하지만, 저는 연결고리가 있는 튜플들의 집합이 더 직관적인 설명인것 같습니다. 두 테이블에 조인 관계에서 한쪽이라도 null이 된다면 선택되지 않습니다.
Full Outer Join은 지원하지 않는 sql이 조금 있습니다. 하지만, 기본적으로 개념은 합집합입니다. 두 테이블의 정보를 잃지 않고 관계가 있는 튜플끼리만 묶는 방식입니다.
조금 위험한 Join 입니다. 두 테이블에 관계가 없는 Join입니다. 그 뜻은, 가능한 모든 관계의 수만큼 튜플이 생성이되고, 이 모든게 유효한 값으로 테이블이 만들어 지게 됩니다. 이것을 줄여 말하면 Cartesian Product라고 말하기도 합니다.
위 그림에 없는 상황입니다. 바로 테이블 자신을 조인하는 방법입니다. 왜 이런 상황이 필요할까요? 같은 테이블 안에서도 관계성을 쉽게 볼 수 있기 때문입니다.

위의 그림을 보면 조금 더 쉽게 이해 할 수 있습니다. 편의상 왼쪽 Color를 Color1, 오른쪽을 Color2라고 하겠습니다. Color1을 갖는 사람은 Color2에 같은 색을 가진 사람의 Secret Santa가 되는 관계가 있습니다. 이 과정에서 간단히 Self Join을 이용해
SELECT t1.name, t2.name as 'Secret_Santa'
from table1 t1
inner join table1 t2
on t1.color1 = t2.color2
이런 식으로 구현 할 수 있습니다.