여기서 두 relation 간에 일치하는 '모든' column들에 대해 join을 수행한다는 말이 무엇인지 알아보자.
예를 들어 table 1과 table 2에 a, b, c라는 column이 서로 일치한다고 하자. 이때 natural join은 일치하는 모든 column에 대해 join을 수행하므로 a, b, c가 모두 일치하는 tuple들을 출력하게 된다.
또한 natural join은 inner join의 일종이므로, 두 relation간 '일치하는' 행만을 출력하게 된다.
따라서 natural join은 아래의 특징을 갖는다
1. natural join은 무조건 "이름도 같고, 타입도 같은" 열에 대해 수행된다.
2. natural join은 위의 조건을 만족하는 "모든 열"에 대해 수행된다.
3. 1과 2에 의해, natural join에서는 on을 이용한 join 조건을 명시할 수 없다.
4. natural join에서는 alias를 사용할 수 없다
여기서 말하는 alias란, qualifier (한정자)를 의미한다. 아래와 같은 것 말이다
from employees as e
natural join은 qualifier을 사용할 수 없게 되어있다. 사실 생각해보면, qualifier를 사용할 이유가 없다. alias는 서로 다른 relation 간에 같은 column이 있을 때 서로를 구분하기 위한 목적으로 사용되는데, natural join은 모든 같은 column에 대해 합쳐버리므로 join 후의 relation에는 같은 이름의 column이 있을 수 없기 때문이다.
따라서 아래의 구문은 오류가 발생한다
select distinct e.job_id, d.location_id
from hr.employees e
natural join hr.departments d
where d.department_id = 80;
ORA-25155: column used in NATURAL join cannot have qualifier
where 절에서 alias를 삭제한 아래의 구문은 시행이 가능하다
select distinct e.job_id, d.location_id
from hr.employees e
natural join hr.departments d
where department_id = 80;