Does it behave like an NOP?
No. The all-zero word is simply an unknown instruction.
That makes it unspecified what a processor does here. It might simply "NOP" assuming the instruction is some unsupported exception.
However, when you read up on RISC-V profiles, it's, at least for application processors, strongly encouraged to raise an illegal exception instruction.
You're using a RISC-V core under your control; if documentation (or, honestly, code) doesn't specify what it does with all-0s, I'd assume it just crashes and burns in beautiful colors.
Whether I would implement all-zero decoding as NOP really depends on the use case – in some systems, being able to zero out memory and start the processor from just any position in the first half of memory to work itself through the NOPs until it hits my initialization code, might be helpful. In other systems, you'd basically hand software attackers a free ticket to the NOP slide amusement park, and screaming in anybody's face when you encounter an illegal instruction would be the right thing to do.
echo .word 0 > foo.s
&&clang -target riscv32 -c foo.s
&&llvm-objdump -d foo.o
on my system disassembles it as twounimp
unimplemented instructions. \$\endgroup\$