Qual implementação de join você está usando? Com join (GNU coreutils) 5.97 , posso usar
[0 1021] ~/temp/jointest % join -a1 -a2 jointest1.txt jointest2.txt
a 1 10
b 2 11
c 12
d 4 13
e 5
e a junção "simples" também funciona (mas omite c e e). Existe uma opção -e que supostamente permite escolher o marcador para campos vazios, mas parece estar quebrado na minha versão e preenche apenas o caso e, não o caso c.