zsh é um pouco diferente aqui do que a maioria dos outros shells. Outras shells, como o bash, tentam expandir os curingas. Se eles não puderem expandir para nada, eles passarão a string literal (contendo os curingas) para o aplicativo. Mas o zsh não faz isso (bem, existe uma opção para isso, fazer ou não). O zsh imprimirá esse erro e não executará o comando. Você pode substituir isso escapando do caractere curinga, se realmente desejar que ele seja passado para o aplicativo. Neste caso você faz desde que você quer que o shell do outro lado a expanda. Então use:
scp remotehost:\*.txt .
Este é realmente o comportamento correto, pois se você tivesse alguns arquivos * .txt locais em sua casa, eles seriam expandidos para um nome que talvez não existisse no controle remoto. Não é isso que você quer.