Unless you turn off the presolve step, CPLEX will eliminate the variables that are locked at zero during presolve. So the answer to your second question is that presolve may take slightly longer (but the difference will be too small to notice) and the actual branch-and-cut phase will not take any longer than if you had omitted the variables yourself. The answer to your third question is that there will be no issues, since the variables will have been eliminated. (There would be no problem in any case.)
Circling around to whether it is a good idea, I would say that there are at least two potential benefits and no liabilities. The first potential benefit is that the model may be a bit easier to read by someone other than yourself, since you avoid having to define subsets of indices for which the variables should not exit. The second potential benefit is that you can create vectors or matrices of variables without having to do any reindexing. There are a number of methods in the Java API where the arguments can be IloNumVar. If you pass in an array in which some elements are missing/undefined, CPLEX will throw an exception. So either you get creative with indexing (sales[i] is the i-th included sales variable as opposed to sales of the i-th product, or whatever), which is a PITA and prone to user error, or you pass in the full vector (sales) and let CPLEX skip over the variables that are fixed at zero.
For what it's worth, I frequently use the lower bound = upper bound = zero technique when some variables should be fixed at zero.