Advantage of executing program in user shell?

Hi,

I'm curious about the advantage of forking and executing a program in a user shell as opposed to forking and executing the program directly without the user shell.

For example:

why is it often like:
SSHD->fork&exec(shell, sftp-server)->fork&exec(sftp-server)

And Not like:

SSHD->fork&exec(sftp-server)

Is there an advantage?

TIA

If you fork a shell, you get access to the shell's facilities, such as wildcard expansion, redirection, etc.

but the sftp program is being accessed by a remote client and the shell features of auto-completion etc will not come into picture as the commands from the sftp client will be passed to the server as is without any modifications. Am I wrong?