[MSSQL] LEFT JOIN 과 LEFT OUTER JOIN 의 차이점 및 기본 정의
안녕하세요.
DB쿼리를 작성하다 보면 LEFT JOIN과 LEFT OUTER JOIN의 차이점이 뭐지?라는 생각을 하신 분들이 있으실 겁니다.
결론부터 말하면 LEFT JOIN 과 LEFT OUTER JOIN의 차이점은 없습니다. 둘은 같은 쿼리이며 같은 결괏값을 나타냅니다. LEFT OUTER JOIN을 LEFT JOIN으로 줄여서 사용하는 것이라 보면 됩니다. 저희가 INNER JOIN을 그냥 JOIN으로 사용하듯이 사용하는 거라고 보시면 됩니다.
예를 들어 아래와 같이 GRADE란 테이블과 CLASS란 테이블과 데이터들이 있습니다.

1. INNER JOIN 은 교집합의 데이터들을 가지고 오는 것으로 A테이블과 B테이블이 모두 가지고 있는 데이터만 가지고 옵니다.
- INNER JOIN 과 JOIN을 해보면 결과가 동일한 것을 알 수 있습니다.


2. LEFT OUTER JOIN 은 왼쪽 테이블을 기준으로 JOIN을 하는 것으로 왼쪽 테이블의 모든 데이터와 A , B 테이블의 중복데이터들이 조회됩니다.


위의 조회 내용은 모든 데이터가 있기에 차이점을 느낄 수 없어 차이를 보여드리기 위해 GRADE 테이블의 90점을 30점으로 변경했을 때의 차이점으로 구분해보도록 하겠습니다.

업데이트 이후 INNER JOIN 시 CLASS 테이블에 SCORE 컬럼에 30점이 없기 때문에 30점으로 UPDATE 된 홍길동과, 철수는 JOIN 되지 않아 조회가 되지 않습니다.


- LEFT OUTER JOIN의 경우 왼쪽 테이블이 기준이기 때문에 30점으로 업데이트된 홍길동과 철수가 조회는 되나 JOIN 된 데이터가 없기에 SCORE와 RANK 칼럼이 NULL로 나타나는 걸 볼 수 있습니다. 그리고 LEFT JOIN과 LEFT OUTER JOIN의 결과물 또한 같은 것을 볼 수 있습니다.


두서없이 주저리 작성하다 보니 LEFT JOIN과 LEFT OUTER JOIN 뿐만 아니라 INNER JOIN까지 나오게 되고 정의까지 설명해 드렸는데 예시 보시면서 정리하시면 금방 이해되시니 한번 혼자 SSMS로 임시테이블 생성해서 조회해 보시면서 차이점을 알아보시는 것도 좋을 거라 생각됩니다.