As a single statement, yes. As part of a whole bunch of statements, it has the severe side effect of canceling the whole stack and requiring me to find out where the error arose, solve it manually, and to continue somewhere. How should one check if a view is actually a view with pure SQL only? It'll result in a construct like CASE WHEN EXISTS SELECT * FROM sqlite_master WHERE ... THEN DROP VIEW ... ELSE END; Which leads us to the question about the sense of "IF EXISTS".