SELECT fact FROM Facts WHERE name = ? and Type = 1 UNION SELECT BaseFacts.fact FROM Facts as BaseFacts JOIN Facts as AliasFacts ON BaseFacts.fact_id = Convert(int,AliasFacts.data) WHERE AliasFacts.name = ? and AliasFacts.Type = 2 and BaseFacts.Type = 1 -- and this all works only if you do not ever have an alias to an alias!