Upsert directive is one thing and upsert procedure is another thing. Do not confuse the two. You can do any procedure, but technically you need to have upsert directive with an indexing on that occasion. This avoids conflicts in the transaction. Between transaction opening and commit.
If you do not use Upsert directive in Schema, I believe that conflicts may occur at some future time in your transactions.
BTW, Dgraph does not check the uniqueness of the attribute in a mutation just because it has @upsert in its Schema. You need to do yourself both.