These are not the same queries at all. They might happen to produce the same data, but that's just because your dataset isn't illustrating the difference.
As you can see, this: (your 2nd query)
http://sqlfiddle.com/#!4/eaf0d/2/0
Is not the same as this:(your 1st query)
http://sqlfiddle.com/#!4/eaf0d/1/0
Your 1st query will return any employee who has the salary of anyone in department 30, and the same commission as anyone in department 30, but each of those is allowed to be different people, ie. the salary might be a match w/ person X and commision might be a match w/ person Y
Your 2nd query will return any employee who has the same salary AND commission of at least one employee in department 30. But unlike the first query, the salary and commission both have to be a match for the same employee in department 30, you can't have one match up with person X and the other with person Y.
In other words, your second query is much more selective.
This is why 'Fish' gets excluded in my example data set, he has a salary that matches up with 'Brian' (but not a match w/ Brian's commission), and he has a match w/ Doodle's commmission (but not Doodle's salary). Because there is not a single match for an employee on the basis of BOTH commission and salary, he got excluded.
He was included in the other query because one or the other did match up w/ at least 1 employee (but those employees were different people).
Performance-wise, the query below will result in fewer table scans and may run faster, but you should only use it if it matches your intentions based on my description of the functional difference between the 2 queries above:
SELECT ename, deptno, sal, comm
FROM emp
WHERE (sal, comm) IN
(SELECT sal, comm FROM emp WHERE deptno = 30)