Play frameworkで、素直にAnorm使ってDB接続してるんですが、例えば
SQL("""
  select * from tableA as t0
  left join * from tableB as t1 on(t0.c1=t1.id)
  left join * from tableC as t2 on(t0.c2=t2.id)
""").as(
  long("t0.id") ~
  long("t1.id") ~
  long("t2.id")
    map {
  // .....(略).....
  })

のように、SQLでaliasを指定した場合にも、Anormはaliasを無視するようです。
バージョンアップしたら解決されてないかなあと思いPlay framework 2.0.x~2.2.xまで全部試してみたのですが解決されておりませんでした。(2.3.xは未確認)

調べてみたところ、lambda me : Play2のAnormでalias名がスルーされた - Playframeworkという記事にあたり、なんとなくの原因はわかりました。
ということで、viewを追加します。

1.evolutionファイルを書き換える

Upsに欲しいviewを作成する処理を、Downsにviewをdropする処理を加えます。
create view tableA_B_C as
  select t0.id as t0_id, t1.id as t1_id, t2.id as t2_id
  from tableA as t0
  left join tableB as t1 on(t0.c1=t1.id)
  left join tableC as t2 on(t0.c2=t2.id);

2.evolutionを走らせる

走らせましょう。

3.SQLを書き直す

こんな感じ。
SQL("select * from tableA_B_C").as(
  long("t0_id") ~
  long("t1_id") ~
  long("t2_id")
    map {
  // .....(略).....
   })
他所のQuestionページでも同様のトラブルにあっている人がいましたが、だいたいの場合、viewを作成してねというアドバイスがなされているので、ある種のデファクトなんですかね。
ちょっと不便そうな気がするのですが、うーん。

参考