Isso é explicado na página man do tcsh (suspeito que você esteja usando tcsh, não csh); veja o terceiro parágrafo citado.
The shell maintains a list of aliases which can be set, unset and
printed by the alias and unalias commands. After a command line
is parsed into simple commands (see Commands) the first word of
each command, left-to-right, is checked to see if it has an alias. If
so, the first word is replaced by the alias. If the alias contains a
history reference, it undergoes History substitution (q.v.) as
though the original command were the previous input line. If the alias
does not contain a history reference, the argument list is left
untouched.
Thus if the alias for 'ls' were 'ls -l' the command 'ls /usr' would
become 'ls -l /usr', the argument list here being undisturbed.
If the alias for 'lookup' were 'grep !^ /etc/passwd' then 'lookup
bill' would become 'grep bill /etc/passwd'. Aliases can be used to
introduce parser metasyntax. For example, 'alias print 'pr !* |
lpr'' defines a ''command'' ('print') which pr(1)s its arguments to
the line printer.
Alias substitution is repeated until the first word of the command has
no alias. If an alias substitution does not change the first word (as
in the previous example) it is flagged to prevent a loop. Other loops
are detected and cause an error.
Uma boa solução é preceder um comando com um caractere \
para inibir a expansão de alias:
alias df 'printf "\n"; \df -hP | column -t'