Is it a good practice to declare drush as a dependency of a contrib module?
If the module doesn't do anything when Drush isn't installed, for example because it's only implementing Drush commands, adding Drush as dependency in composer.json is perfectly fine.  

I don't see any reason for not adding it in the composer.json dependencies. Probably, the users who don't add it as dependency for their modules think that most users download the module from the project page on drupal.org and the dependencies on composer.json wouldn't stop them from installing the module.  

I would rather add the dependency from Drush in the composer.json file, in the same way I would add a dependency from a module the Standard profile installs, in the .info.yml file of a module I develop.
Eventually, I would add a hook_requirements() implementation that doesn't allow users to install the module when Drush isn't present, for the users who install the module from the user interface or using the project archive downloaded from drupal.org.