The two are clearly separate, at least under some circumstances. Just for example, in C or C++, there are declarations that just declare things, and there are definitions that both declare and create them, and (only in C++) there are new
expressions that create objects without declaring them (and, arguably, a malloc sort of does the same in C).
Likewise, in a language that supports lambda expressions, creation and declaration are separate -- a lambda expression creates something (e.g., a function) but doesn't (by itself) declare it (bind a name to it).