The redirection of the command output seems to be irrelevant because the notification is send by the shell when a job is started asynchronously. More precisely, it is a shell feature (fonctionality) related to job control.
Here, a quote that comes from the "Bash Reference Manual", chapter "Job Control", section one.
The shell associates a JOB with each pipeline. It keeps a table of
currently executing jobs, which may be listed with the jobs command.
When Bash starts a job asynchronously, it prints a line that looks like:
[1] 25647
indicating that this job is job number 1 and that the process ID of the last process in the pipeline associated with this job is 25647.
All of the processes in a single pipeline are members of the same job.
Bash uses the JOB abstraction as the basis for job control.
Note that a shell script does not display this notification.
$ cat test
#!/bin/bash
true & echo true
$ ./test
true
In facts
Zsh
The Zsh documentation provides similar indications about these notifications, see man 1 zshmisc, section "JOBS". These notifications are not displayed when job control is disabled.
MONITOR (-m, ksh: -m)
Allow job control. Set by default in interactive shell.
zsh_prompt % setopt no_monitor
zsh_prompt % true & echo true
true
zsh_prompt %
zsh_prompt %
Bash
It seems that Bash always displays e.g. [1] 25647. The "final notification" e.g. [1]+ Done true is not displayed when job control is disabled.
bash_prompt $ true & echo true
[1] 25647
true
bash_prompt $
[1]+ Done true
Job control disabled
bash_prompt $ set +m # disable job control
bash_prompt $ true & echo true
[1] 25685
bash_prompt $
bash_prompt $
Conclusion
I do not know if disable job control to hide the notifications is a good thing?
Resources