This first query assumes that table2.number is unique for a given id. That might not be true. If it is:
select table1.id, table1.value
from table1
join table2
on table1.id = table2.idTable1
group by table1.id, table1.value
having count(*) = 3
where table2.number in (1,3,4)
If 'number' could be a repeating value (is not unique for each idTable1), then we need to make sure we're joining on distinct values in table2:
select table1.id, table1.value
from table1
join (select distinct table2.idTable1, table2.number where table2.number in (1,3,4)) t2
on table1.id = t2.idTable1
group by table1.id, table1.value
having count(*) = 3