Drush sql-sync not working on multisite
It is true that mixing @alias and -l together does happen to work in the local case, but is not supported in sql-sync.  If this did work, you would need to use --target-uri and --source-uri to distinguish the two different -l/--uri options, but this has never been implemented.  Drush always uses the source and target alias records, and nothing else, to determine how to look up the source and target database records.

As Clive says, the best thing to do it so set up separate aliases for each site.  If you put all of your aliases in a single file, they will automatically create an alias group.

For example, I do something like this:

sitename.aliases.drushrc.php:

&lt;?php

$aliases['live'] = array (
  'parent' =&gt; '@server.urpad',
  'root' =&gt; '/srv/www/sitename/htdocs',
  'uri' =&gt; 'http://sitename.com',
}

$aliases['dev'] = array (
  'root' =&gt; '/srv/www/sitename/htdocs',
  'uri' =&gt; 'http://sitename.com',
}


server.aliases.drushrc.php:

&lt;?php

$aliases['urpad'] = array (
  'remote-host' =&gt; 'my.remote-server.org',
  'remote-user' =&gt; 'www-admin',
}


Using a 'server' alias file allows me to easily specify where I want to put each remote site without having to duplicate the remote host information.

Then, to use it:

drush sql-sync @sitename.live @sitename.dev