WITH hier1(parent, level) AS
(
SELECT mum, 1
FROM AnimalTable a
WHERE a.id = @first_animal
UNION ALL
SELECT dad, 1
FROM AnimalTable a
WHERE a.id = @first_animal
UNION ALL
SELECT mum, level + 1
FROM q
JOIN AnimalTable a
ON a.id = q.parent
UNION ALL
SELECT dad, level + 1
FROM q
JOIN AnimalTable a
ON a.id = q.parent
),
hier2(parent, level) AS
(
SELECT mum, level
FROM AnimalTable a
WHERE a.id = @second_animal
UNION ALL
SELECT dad, level
FROM AnimalTable a
WHERE a.id = @second_animal
UNION ALL
SELECT mum, level + 1
FROM q
JOIN AnimalTable a
ON a.id = q.parent
UNION ALL
SELECT dad, level + 1
FROM q
JOIN AnimalTable a
ON a.id = q.parent
)
SELECT TOP 1
h1.parent,
CASE WHEN h1.level < h2.level THEN h1.level ELSE h2.level END AS minlevel
FROM hier1 h1
JOIN hier2 h2
ON h1.parent = h2.parent
ORDER BY
2