SQL을 아침마다 풀면서 머리를 깨우는 것이 일상이 된 요즘, 오늘도 관성적으로 SQL을 풀었다.
관성의 무서움은 실로 존재한다.
가장 흔하게 쓰이는 JOIN의 형태는 LEFT JOIN이다.
오늘 무지성으로 LEFT JOIN을 사용하는 나 자신에게 꽤나 놀랐다.

LEFT JOIN을 하게 되면 TABLE1의 데이터는 모두 살리고 TABLE2에 같은 값이 없다면 전무 NULL값이 된다.

INNER JOIN을 하게 되면 양 쪽 테이블의 교집합 값들만 가져온다.
INNER JOIN 한번 하면 될 작업을 무지성 LEFT JOIN 후 WHERE A IS NOT NULL 필터링을 하는 나에게 실망쓰~
정신 차리고 최적화된 쿼리를 작성하도록 하자.
WITH IN_NATURAL AS (
SELECT *
FROM ANIMAL_INS
WHERE SEX_UPON_INTAKE IN ('Intact Female', 'Intact Male')
),
OUT_EXECUTED AS(
SELECT *
FROM ANIMAL_OUTS
WHERE SEX_UPON_OUTCOME IN ('Neutered Male', 'Spayed Female'))
SELECT
O.ANIMAL_ID, O.ANIMAL_TYPE, O.NAME
FROM
OUT_EXECUTED O LEFT JOIN IN_NATURAL I
ON O.ANIMAL_ID = I.ANIMAL_ID
WHERE I.ANIMAL_ID IS NOT NULL
ORDER BY O.ANIMAL_ID
with 말고 inner join 사용SELECT
I.ANIMAL_ID, I.ANIMAL_TYPE, I.NAME
FROM
ANIMAL_INS I INNER JOIN ANIMAL_OUTS O
ON I.ANIMAL_ID = O.ANIMAL_ID
WHERE
I.SEX_UPON_INTAKE LIKE 'Intact%' AND
O.SEX_UPON_OUTCOME IN ('Spayed Female', 'Neutered Male')
ORDER BY
I.ANIMAL_ID