When you capture the continuation with (call/comp (λ (return-cont) ....)), you don't delimit it with this-prompt, so the continuation you get looks like this:
(I've turned the (define sql ....) into a let and simplified away some other distractions.)
The print-result is inserted by the racket language's #%module-begin macro. That's why expressions in the module body get printed out. The print-result form is actually a macro, but for now you can think of it like a procedure that just prints the given value (if not void) and returns it.
(Arguably, the call to print-result should be outside the default module-body prompt, not inside it. Or rather, since the existing prompt is installed by a lower level, maybe print-result should install its own prompt.)
When you apply the continuation, it performs the query, and then the captured call to print-result prints the result. Then it returns the result to the REPL, which prints it again.
I'm going to think about the sequence of events that you described, but I supplied this-prompt as the second argument to call/comp and that solved the double return. Is there anything else that you see wrong, before I close the book on this?
Just to be clear, this use case requires passing the prompt tag to 3 functions: call/comp, abort/cc and call-with-continuation-prompt? Or am I doing something redundant?