Depende de cómo se defina "declaración" y "expresión".
Una definición muy estricta distinguiría entre afirmaciones como "cosas que tienen efectos secundarios, y tal vez un valor de retorno" y expresiones como "cosas que tienen valores de retorno, pero no pueden tener efectos secundarios". Con tal definición, no se puede escribir ningún programa significativo sin al menos una declaración (que tendría que evaluar una expresión y generar su valor de retorno): las expresiones puras por sí solas no pueden interactuar con el mundo fuera del programa. Un lenguaje solo puede ser completamente puro (es decir, no tener ningún enunciado), si la parte impura se saca del lenguaje y se introduce en el ecosistema de soporte (que es exactamente lo que hace Haskell, aunque el lenguaje tiene definiciones y expresiones) .
Sin embargo, si permite efectos secundarios en las expresiones, la distinción entre declaraciones y expresiones se vuelve arbitraria y mucho menos interesante; por supuesto, puede inventar un lenguaje de programación que consista solo en expresiones; la mayoría de los dialectos de Lisp funcionan de esa manera. En tal situación, evaluar una expresión por sus efectos secundarios es casi exactamente lo mismo que ejecutar una declaración, y uno podría argumentar que en dicho lenguaje, las expresiones y las declaraciones son lo mismo. La diferencia entre una declaración y una expresión, entonces, es solo sintáctica.
Muchos idiomas aún hacen esta distinción sintáctica, porque es útil no por razones técnicas, sino por legibilidad. Hacer que algo sea una expresión indica que está interesado en su valor de retorno, menos sus efectos secundarios; al hacer una declaración le dice al lector que tiene la intención de que cause efectos secundarios, y el valor de retorno puede o no ser interesante.