You can do it with JOIN
s this way
SELECT m.*, COALESCE(l.name, a.name) name
FROM animal m LEFT JOIN land_animal l
ON m.type = 0
AND m.animal_id = l.animal_id LEFT JOIN air_animal a
ON m.type = 1
AND m.animal_id = a.animal_id
or
SELECT m.*, q.name
FROM animal m JOIN
(
SELECT 0 type, animal_id, name
FROM land_animal
UNION ALL
SELECT 1 type, animal_id, name
FROM air_animal
) q
ON m.type = q.type
AND m.animal_id = q.animal_id
Sample output:
| ID | TYPE | ANIMAL_ID | NAME |
|----|------|-----------|-------|
| 1 | 0 | 1 | horse |
| 2 | 1 | 1 | owl |
Here is SQLFiddle demo