Your intuition of setting the two equations equal is correct and that is how you solve for the intersection. I'll provide a full explanation, with code examples.
A common way of representing a plane $\mathbf{P}$ is in point-normal form, $\mathbf{\vec{n}} \cdot (X-Y)=0$, where $\mathbf{\vec{n}}$ is the plane normal and both $X$ and $Y$ are points that lie in the plane. This can be rewritten into constant-normal form by distributing the dot product and rearranging terms to obtain: $\mathbf{\vec{n}} \cdot X = d$, where $d = \mathbf{\vec{n}} \cdot Y$ which is equal to the distance from the origin when $\mathbf{\vec{n}}$ is unit-length. Below is a simple data structure that you might use to represent a plane, and the signature of a constructor that will compute the plane from three points in $\mathbb{R^3}$. Implementation is left as an exercise to the reader ;).
struct Plane {
Vector3 n; // normal
float d; // distance from origin
Plane(); // default constructor
Plane(Vector3 a, Vector3 b, Vector3 c); // plane from 3 points
Vector3 intersectLine(Vector3 a, Vector3 b); // we'll get to this later
};
Given two points, $A$ and $B$, a line can be represented parametrically by adding to one point the vector formed by the two points, scaled by a parameter $t$. In symbols, $L(t) = A + t(B-A)$. Using your intuition, we insert this equation (whose output is a point), into $X$ in the constant-normal plane representation: $\mathbf{\vec{n}} \cdot [A + t(B-A)] = d$. We want to know how many copies of $(B-A)$ we need to add to $A$ to get to a point that lies within the plane, in other words we want to solve for $t$. Doing some fancy algebra, we obtain: $t = \frac{d-\mathbf{\vec{n}} \cdot A}{\mathbf{\vec{n}} \cdot (B-A)}$. We can (finally) stick this expression for $t$ back into the equation for our line to obtain: $I = A+\frac{d - (\mathbf{\vec{n}} \cdot A)}{\mathbf{\vec{n}} \cdot (B-A)}(B-A).$
Armed with this equation, we can now implement a nice function that will tell what we want to know:
Vector3 Plane::intersectLine(Vector3 a, Vector3 b) {
Vector3 ba = b-a;
float nDotA = Vector3::dotProduct(n, a);
float nDotBA = Vector3::dotProduct(n, ba);
return a + (((d - nDotA)/nDotBA) * ba);
}
Hopefully this works for you, and hopefully I didn't fudge any of the details! If you plan to be doing a lot of this sort of geometric computing it's worthwhile to pick up Christer Ericson's Real-time Collision Detection, which is an excellent reference source for this sort of thing. Alternatively, you could snag some already-constructed classes from something like OGRE3D, if you're not particularly interested in creating your own.
$\newcommand{\Vec}[1]{\mathbf{#1}}$Generalities: Let $S$ be the sphere in $\mathbf{R}^{3}$ with center $\Vec{c}_{0} = (x_{0}, y_{0}, z_{0})$ and radius $R > 0$, and let $P$ be the plane with equation $Ax + By + Cz = D$, so that $\Vec{n} = (A, B, C)$ is a normal vector of $P$.
If $\Vec{p}_{0}$ is an arbitrary point on $P$, the signed distance from the center of the sphere $\Vec{c}_{0}$ to the plane $P$ is
$$
\rho = \frac{(\Vec{c}_{0} - \Vec{p}_{0}) \cdot \Vec{n}}{\|\Vec{n}\|}
= \frac{Ax_{0} + By_{0} + Cz_{0} - D}{\sqrt{A^{2} + B^{2} + C^{2}}}.
$$
The intersection $S \cap P$ is a circle if and only if $-R < \rho < R$, and in that case, the circle has radius $r = \sqrt{R^{2} - \rho^{2}}$ and center
$$
\Vec{c}
= \Vec{c}_{0} + \rho\, \frac{\Vec{n}}{\|\Vec{n}\|}
= (x_{0}, y_{0}, z_{0}) + \rho\, \frac{(A, B, C)}{\sqrt{A^{2} + B^{2} + C^{2}}}.
$$
Now consider the specific example
$$
S = \{(x, y, z) : x^{2} + y^{2} + z^{2} = 4\},\qquad
P = \{(x, y, z) : x - z\sqrt{3} = 0\}.
$$
The center of $S$ is the origin, which lies on $P$, so the intersection is a circle of radius $2$, the same radius as $S$.
When you substitute $x = z\sqrt{3}$ or $z = x/\sqrt{3}$ into the equation of $S$, you obtain the equation of a cylinder with elliptical cross section (as noted in the OP). However, you must also retain the equation of $P$ in your system. That is, each of the following pairs of equations defines the same circle in space:
\begin{align*}
x - z\sqrt{3} &= 0, & x - z\sqrt{3} &= 0, & x - z\sqrt{3} &= 0, \\
x^{2} + y^{2} + z^{2} &= 4; & \tfrac{4}{3} x^{2} + y^{2} &= 4; & y^{2} + 4z^{2} &= 4.
\end{align*}
These may not "look like" circles at first glance, but that's because the circle is not parallel to a coordinate plane; instead, it casts elliptical "shadows" in the $(x, y)$- and $(y, z)$-planes.
Note that a circle in space doesn't have a single equation in the sense you're asking.
Best Answer
If the line given parametrically by $\mathbf p_0+t\mathbf v$ lies on the plane $ax+by+cz=\mathbf n\cdot\mathbf p=d$ then $\mathbf p_0$ must satisfy the equation of the plane, i.e., $\mathbf n\cdot\mathbf p_0=d$, and its direction vector $\mathbf v$ must be perpendicular to the plane’s normal $\mathbf n$, so that $\mathbf n\cdot\mathbf v=0$. Therefore, when you substitute into the plane’s equation, you will get $$\mathbf n\cdot(\mathbf p_0+t\mathbf v) = d \\ \mathbf n\cdot\mathbf p_0 + t(\mathbf n\cdot\mathbf v) = d \\ d = d.$$