Няма разлика между тези две изрази и оптимизаторът ще трансформира IN
към =
когато IN
има само един елемент в него.
Въпреки че, когато имате такъв въпрос, просто изпълнете и двата оператора, стартирайте техния план за изпълнение и вижте разликите. Тук - няма да намерите.
След голямо търсене онлайн намерих документ на SQL, за да поддържа това (предполагам, че се отнася за всички СУБД):
Ето плана за изпълнение на двете заявки в Oracle (повечето СУБД ще обработва това по същия начин):
EXPLAIN PLAN FOR
select * from dim_employees t
where t.identity_number = '123456789'
Plan hash value: 2312174735
-----------------------------------------------------
| Id | Operation | Name |
-----------------------------------------------------
| 0 | SELECT STATEMENT | |
| 1 | TABLE ACCESS BY INDEX ROWID| DIM_EMPLOYEES |
| 2 | INDEX UNIQUE SCAN | SYS_C0029838 |
-----------------------------------------------------
И за IN()
:
EXPLAIN PLAN FOR
select * from dim_employees t
where t.identity_number in('123456789');
Plan hash value: 2312174735
-----------------------------------------------------
| Id | Operation | Name |
-----------------------------------------------------
| 0 | SELECT STATEMENT | |
| 1 | TABLE ACCESS BY INDEX ROWID| DIM_EMPLOYEES |
| 2 | INDEX UNIQUE SCAN | SYS_C0029838 |
-----------------------------------------------------
Както можете да видите, и двете са идентични. Това е в индексирана колона. Същото важи и за неиндексирана колона (само пълно сканиране на таблицата).