MySQL, get rows for non-matching reference or reference does not exist in other table MySQL, select non-matching reference or reference does not exist in other table.

For example.

table: category
category_id,    category_name
1               XYZ_1
2               XYZ_2
3               XYZ_3
4               XYZ_4
5               XYZ_5
6               XYZ_6


table: type
type_id,    type_name
1           A
2           B
3           C
4           D


table: type_match
match_Id,   type_id category_id
1           2       1
2           3       1
3           4       1
4           1       1
5           2       2
6           3       2
7           2       3       
8           4       3
9           2       4


I need category_id where type_id is not 3 or category_id does not exist in type_match table: 
expected result:

category_id
3  // category_id exist in type_match table but not matching type_id = 3
4  // category_id exist in type_match table but not matching type_id = 3
5  // category_id does not exist in type_match table
6  // category_id does not exist in type_match table


Please help.
SELECT c.category_id
FROM category c
LEFT JOIN type_match t ON c.category_id = t.category_id AND t.type_id = 3
WHERE t.category_id IS NULL


Or the same in NOT EXISTS form:

SELECT category_id
FROM category c
WHERE NOT EXISTS ( SELECT NULL
                   FROM type_match t 
                   WHERE c.category_id = t.category_id 
                     AND t.type_id = 3 )