Would like to know why this query is behaving this way?
Your query, given your data, is equivalent to this one:

SELECT emp.name, role.role_name, emp.emp_id 
FROM emp 
INNER JOIN role 
    ON emp.role_id = 1; -- because this is the role_id for 'tech'


This means that you don't define a condition about how to join the two tables.  In turn, this results in a Cartesian product of role (without any restriction about which rows to return) and emp (where role_id is 1).

Again rewriting the query, it is effectively a CROSS JOIN:

SELECT emp.name, role.role_name, emp.emp_id 
FROM emp 
CROSS JOIN role 
WHERE emp.role_id = 1;


See them on SQLFiddle.

What you possibly want is

SELECT emp.name, role.role_name, emp.emp_id 
FROM emp 
INNER JOIN role 
    ON emp.role_id = role.role_id
WHERE emp.role_id = 1;