상수값에 대한 조건은 조건절 이행이라고 하는 쿼리 변환 과정을 거칠 수 있습니다.
(a=b & a=1) ==> (a=b & a=1 & b=1)
그러나 컬럼끼리의 조인 조건은 이행되지 않습니다.
(a=b & a=c) =(X)=> (a=b & a=c & b=c)
따라서 b=c 가 중요한 역할을 한다면 조건절에 따로 명시를 해줘야 합니다.
http://wiki.gurubee.net/pages/viewpage.action?pageId=26742349
테이블이 4(a,b,c,d)개인 경우 조인조건은 3개(4-1=3)면 충분합니다.
가능한 모든 조건의 경우의수는 총 6개인데
이중 3개만 선택하면 어떤걸 선택하든 그 의미는 동일하다고 볼 수 있습니다.
(a=b, a=c, a=d, b=c, b=d, c=d)
의미상으로는 동일하지만 실행계획상으로는 다를 수 있습니다.
조인 조건은 데이터를 찾아가는 길입니다.
(a=b, b=c, c=d) 의 경우 길은 (a-b-c-d) 의 형태입니다.
a 에서 d 로 가려면 b 와 c 를 거쳐야만 갈 수 있습니다.
(a=b, a=c, a=d) 의 경우 길은 a 를 중심으로 b,c,d 로 갈라지는 구조입니다.
b 에서 c 로 가려면 반드시 a 를 거쳐야만 하지요.
길을 찾아가는 방법에 따라 성능이 달라 질 수 있습니다.
따라서 효율적인 길을 뚤어 놓고 비효율적인 길은 폐쇄시키는게 좋은데요.
어느 길이 효율적인지 모를 때는 차라리 6개 길 모두 뚤어 놓는 것도 한 방법입니다.
다만 조건이 많아지면 쿼리가 지저분해지겠죠.