Más formalmente, los métodos deben devolver un valor sólo si son referencialmente transparentes y, por tanto, no poseen efectos colaterales.
Command–query separation está particularmente bien adaptado a una metodología de diseño por contrato (DbC), en la que el diseño de un programa se expresa como aserciones incluidas en el código fuente, que describen el estado del programa en determinados momentos críticos.
[1][2] CQS puede hacer que sea más difícil la implementación de software reentrante y multihilo correctamente.
Esto suele ocurrir cuando un patrón no-thread-safe se utiliza para implementar la command query separation.
Incluso en programas de un único hilo, a veces es mucho más conveniente tener un método que es una consulta combinada con comando.